2012-03-29 2 views
0

이 아니므로 배열을 사용하여 값을 계산하는 클래스를 만들었습니다. 그런 다음 GUI 인터페이스에 통합하기로 결정했습니다. 이 이상한 오류를 발견 할 때까지 모든 것이 잘되었습니다. 하나의 jtextfields (prarie)는 텍스트를 저장하지 않고 다른 하나 (yard)는 텍스트를 저장하지 않습니다.하나의 JTextField가 텍스트를 저장하고 업데이트하며 다른 하나는

나는이 사이트에서 내 문제와 비슷한 내 문제를 발견했다. 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

관련 문제