0

この GUI に少し問題があります。GUI を作成するのは初めてなので、何か基本的なことを聞​​いて申し訳ありません。私の問題に対する答えがグーグルのどこにも見つからないようです。私が抱えている問題は、ボタンのいずれかをクリックすると、テキストフィールドのいずれかが空のままになっているとエラーが発生することです。ここに私のコードがあります

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;

public class MainGUI extends JFrame implements ActionListener{

ArrayList<Object> list;
JTextField name, surname, age, height, weight;
JComboBox<String> sportList, gender;
JButton btnSave;
JButton btnExit;
JButton btnclrtxt;


/**
 * @param args
 */
public MainGUI() {
    super("Adding members");
    this.setLayout(new BorderLayout());
    JPanel panel = new JPanel(new FlowLayout());
    name = new JTextField(10);
    surname = new JTextField(10);
    age = new JTextField(10);
    height = new JTextField(5);
    weight = new JTextField(10);
    gender = new JComboBox<String>(new String[] { "Male", "Female" });
    sportList = new JComboBox<String>(new String[] { "Football",
            "HandBall", "BasketBall", "Rugby", "Hockey", "Tennis" });

    panel.add(new JLabel("Name:"));
    panel.add(name);
    panel.add(new JLabel("Surname:"));
    panel.add(surname);
    panel.add(new JLabel("Age:"));
    panel.add(age);
    panel.add(new JLabel("Gender:"));
    panel.add(gender);
    panel.add(new JLabel("Height:"));
    panel.add(height);
    panel.add(new JLabel("Weight:"));
    panel.add(weight);
    panel.add(new JLabel("Sport Speciality:"));
    panel.add(sportList);

    btnSave = new JButton("Save member");
    panel.add(btnSave);
    btnSave.addActionListener(this);

    btnclrtxt = new JButton("Clear text");
    panel.add(btnclrtxt);
    btnclrtxt.addActionListener(this);

    btnExit = new JButton("Exit");
    panel.add(btnExit);
    btnExit.addActionListener(this);

    this.pack();
    this.add(panel);
    this.setSize(400, 300);
    this.setVisible(true);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    new MainGUI();
          }

public void actionPerformed(ActionEvent e) {

            String namestr = name.getText().toLowerCase();
    String surnameStr = surname.getText().toLowerCase();
    int ageNum = Integer.parseInt(age.getText().toLowerCase());
    double heightNum = Double.parseDouble(height.getText().toLowerCase());
    double weightNum = Double.parseDouble(weight.getText().toLowerCase());
    String sportsStr = sportList.getSelectedItem().toString();
    String genderStr = gender.getSelectedItem().toString();

              if(e.getSource()==btnSave)  {
        list = new ArrayList<Object>();
        list.add("Name is "+namestr);
        list.add("Surname is "+surnameStr);
        list.add("Age is "+ageNum);
        list.add("Height is "+heightNum);
        list.add("Weight is "+weightNum);
        list.add("Sport "+sportsStr);
        list.add("Gender "+genderStr);
        FileRead.writeFile(list);
        System.out.println("Done!");
                }

    if(e.getSource()==btnExit)  {
                dispose();
                                    System.exit(0);
                           }

    if(e.getSource()==btnclrtxt)  {
         name.setText("");
         surname.setText("");
         age.setText("");
         height.setText("");
         weight.setText("");
               }
 }
}
4

2 に答える 2

2

wotking、しかし if をテストしない場合JTextField.isEmpty、使用する代わりに、解析により正しい例外がスローされます

  • JFormattedTextFieldNumberFormatter の場合、デフォルトの値は 0 (ゼロ)です

  • JSpinnerSpinnerNumberModel場合、デフォルトの値は 0 (ゼロ) です

  • DocumentFilter非数値文字をフィルタリングしてプレーンに追加しJTextFieldますが、それでもテストする必要がありますJTextField.isEmpty()

于 2013-03-30T15:43:51.627 に答える
2

これは、次のフィールドが原因であると思われます。

int ageNum = Integer.parseInt(age.getText().toLowerCase());
double heightNum = Double.parseDouble(height.getText().toLowerCase());
double weightNum = Double.parseDouble(weight.getText().toLowerCase());

これらのフィールドのいずれかが空の場合、または正しくない値が含まれている場合、解析は例外をスローします。(有効な) 値が含まれていることを確認してください。たとえば、 JFormattedTextFieldを使用します。

于 2013-03-30T15:45:01.597 に答える