2012-03-29 8 views
0

です。したがって、配列をとり、それらから値を計算するクラスを作成しました。私はそれから、それをGUIインターフェースに組み込むことを(無意識に)決めました。私はこの奇妙な誤りに気づくまでうまくいった。 jtextfields(prarie)の1つはテキストを格納せず、もう1つ(yard)は保存します。1つのJTextFieldがテキストを保存して更新しますが、もう1つは

私はこのサイトで私の問題を見回して私の問題を見つけました。 Updating text in a JTextField

しかし、彼には全く動作しないものがありました。動作するものと動作しないものがありました。

コードはここにある(それは少し長いですが、それのほとんどはGUIである)ので、あなたの息!:

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()); 



    } 
} 

}コードを実行してに時間がかかり

誰もを開催ダミー値を入力すると「ヤード」に値が格納され、「prarie」には値が格納されません。どうしてこれなの?

*私は明らかに(いつものように)見落としていると確信しています。

答えて

0

変更:

meterPanel.add(new JTextField(5)); 

へ:prarieのテキストフィールド

+0

ためのループの中

meterPanel.add(prarie[x]); 

私はそれがこの単純なものだった考え出し。それを指摘してくれてありがとう! – Zchpyvr

関連する問題