2012-03-29 7 views
0

Also, ich habe eine Klasse, die Arrays und berechnet einen Wert von ihnen. Ich entschied mich dann (unwissentlich), es in eine GUI-Schnittstelle zu integrieren. Alles ging gut, bis ich diesen merkwürdigen Fehler bemerkte; eines der jtextfields (prarie) würde keinen Text speichern, während das andere (yard) das tut.Ein JTextField speichert und aktualisiert Text, der andere nicht

Ich schaute mich um und fand mein Problem ähnlich wie meines auf dieser Seite; Updating text in a JTextField

Aber er hatte eine, die überhaupt nicht funktioniert, wo ich eine habe, die funktioniert und eine, die nicht funktioniert.

Der Kodex ist hier (es ist ein bisschen lang, aber das meiste davon ist GUI), so halten Sie den Atem !:

import java.awt.GridLayout; 
import javax.swing.Box; 
import javax.swing.JCheckBox; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 


public class Window { 

/** 
* @param args 
*/ 
private static int numb; 
private static double micro, centi; 
private static JTextField[] yard,prarie; 
private static double[] charges,distances; 

public static void main(String[] args) 
{ 
    //create a small dialog window to take in number of charged objects 
    JPanel startup = new JPanel(); 
    JTextField many = new JTextField(5); 
    startup.add(many); 

    int result = JOptionPane.showConfirmDialog(null,startup , "Please Enter How Many Charged Objects are Being Evaluated", JOptionPane.OK_CANCEL_OPTION); 
    many.requestFocusInWindow(); 

    //once ok is clicked, then the number input will be stored under 'numb' 
    //then proceed to inputFields 
    if (result == JOptionPane.OK_OPTION) 
    { 
     numb = Integer.parseInt(many.getText()); 
     inputFields(); 
    } 
} 

//this window opens the various JTextFields for input 
public static void inputFields() 
{ 


    //top JTextFields 
    yard = new JTextField[numb]; 
    JPanel chargePanel = new JPanel(); 
    for(int x=0;x<numb;x++) 
    { 
     yard[x] =new JTextField(5); 
     chargePanel.add(new JLabel("Charge "+ Integer.toString(x+1)+":")); 
     chargePanel.add(yard[x]); 
     chargePanel.add(Box.createVerticalStrut(15)); // a spacer 
    } 

    //bottom JTextFields 
    prarie = new JTextField[numb-1]; 
    JPanel meterPanel = new JPanel(); 
    for(int x=0;x<numb-1;x++) 
    { 
     prarie[x]=new JTextField(5); 
     meterPanel.add(new JLabel("Meters "+ Integer.toString(x+1)+":")); 
     meterPanel.add(new JTextField(5)); 
     meterPanel.add(Box.createVerticalStrut(15)); // a spacer 
    } 

    //JCheckBoxes 
    JCheckBox isMicro = new JCheckBox("Charges are in terms of microCoulombs"); 
    JCheckBox isCm = new JCheckBox("Distances are in terms of centiMeters"); 

    JPanel chechBox = new JPanel(); 
    chechBox.add(isMicro); 
    chechBox.add(Box.createVerticalStrut(20)); 
    chechBox.add(isCm); 

    //Paste them all together into one window 
    GridLayout gufi = new GridLayout(3,1); 
    JPanel host = new JPanel(gufi); 
    host.add(chargePanel); 
    host.add(meterPanel); 
    host.add(chechBox); 
    int result1 = JOptionPane.showConfirmDialog(null, host, "Please Enter Charge and Distance Values", JOptionPane.OK_CANCEL_OPTION); 

    //if ok is clicked, then go to 'printArr()' to print the JTextFields 
    //then go to assign the values from the JTextFields to private double arrays 'yard' and 'prarie' 
    if (result1 == JOptionPane.OK_OPTION) 
    { 
     micro = (isMicro.isSelected())? Math.pow(10, -6): 1; 
     centi = (isCm.isSelected())? .01: 1; 


     printArr(); 
     assign(); 
    } 
} 

//a makeshift method to print the value from the JTextFields 
//to fix the problem of why prarie wouldn't store numbers 
public static void printArr() 
{ 
    System.out.println("Charges are:"); 
    for(int x=0;x<numb;x++) 
     System.out.print(yard[x].getText() + " "); 
    System.out.println("Distances are:"); 
    for(int x=0;x<numb-1;x++) 
     System.out.print(prarie[x].getText() + " "); 
} 

//assigns values from JTextFields to the private double arrays 'yard' and 'prarie' 
public static void assign() 
{ 

    try { 
     charges = new double[numb]; 
     for(int x=0;x<numb;x++) 
      charges[x]=micro*Double.parseDouble(yard[x].getText().trim()); 

     distances = new double[numb-1]; 
     for(int x=0;x<numb-1;x++) 
      distances[x]=centi*Double.parseDouble(prarie[x].getText().trim()); 

    } catch (NumberFormatException e) { 
     e.printStackTrace(); 
     //inputFields(); 
    } 
    calculate(); 
} 
public static void calculate() 
{ 


    JPanel sample = new JPanel(); 
    JTextField whichOne = new JTextField(5); 
    sample.add(whichOne); 

    int result = JOptionPane.showConfirmDialog(null,sample , "Please Enter Which Charged Object thy Wishs For", JOptionPane.OK_CANCEL_OPTION); 
    whichOne.requestFocusInWindow(); 
    if (result == JOptionPane.OK_OPTION) 
    { 
     int target = Integer.parseInt(whichOne.getText()); 



    } 
} 

}

Wer den Code ausgeführt wird und sich die Zeit nimmt zu Wenn Sie Dummy-Werte eingeben, wird angezeigt, dass "Yard" Werte speichert, während "Prarie" dies nicht tut. Warum ist das?

* Ich bin mir ziemlich sicher, dass ich offensichtlich übersehen (wie immer).

Antwort

0

Wechsel:

meterPanel.add(new JTextField(5)); 

zu:

meterPanel.add(prarie[x]); 

in der for-Schleife für die prarie Textfelder

+0

Ich dachte, es war etwas so einfach. Danke für das Aufzeigen! – Zchpyvr

Verwandte Themen