1

だから私はJDialogからユーザーからの入力を取得しようとしています.JDialog内のコードは次のとおりです:

public void addPipeUI(){
     Integer[] grade = {1,2,3,4,5};
     Integer[] colour = {0, 1, 2};
     float length;
     int diameter;
     boolean chemResist, innerIns, outerRein;
     GridLayout gridLayout = new GridLayout(0,2);

     JDialog dialog = new JDialog();
     dialog.setSize(400, 400);
     dialog.setLocation(250, 250);
     dialog.setTitle("Add Pipe");
     dialog.setLayout(gridLayout);
     dialog.setVisible(true);

     dialog.add(new JLabel("Grade"));
     JComboBox gradeField = new JComboBox(grade);
     dialog.add(gradeField);

     dialog.add(new JLabel("Colour"));
     JComboBox colourField = new JComboBox(colour);
     dialog.add(colourField);

     dialog.add(new JLabel("Length (Meters)"));
     JTextField lengthField = new JTextField();
     dialog.add(lengthField);

     dialog.add(new JLabel("Diameter (Inches)"));
     JTextField diameterField = new JTextField();
     dialog.add(diameterField);

     JRadioButton innerInsField = new JRadioButton("Inner Insluation");
     dialog.add(innerInsField);

     JRadioButton outerReinField = new JRadioButton("Outer Reinforcement");
     dialog.add(outerReinField);

     JRadioButton chemResistField = new JRadioButton("Chemical Resistance");
     dialog.add(chemResistField);

     JButton ok = new JButton("OK");
     dialog.add(ok);


 }

上部には、ユーザーに入力してもらいたい情報が表示されます。

[OK] ボタンが押されたら、ローカル変数をユーザーが入力したものと同じにしてから、それらの変数を Main クラスに返して処理したいと考えています。 OKボタンにアクションリスナーが必要な気がしますが、そうするとローカル変数を使用できず、混乱しています。ローカル変数をユーザーが入力したものと同じにするにはどうすればよいですか?

4

1 に答える 1

1

クリックイベントをキャッチできるように、ボタンにアクションリスナーを追加する必要があります

ok.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String length = lengthField.getText();
        System.out.println("length=" + length);
    }
});

ローカル変数にアクセスするlengthFieldには、if final にする必要があります。

final JTextField lengthField = new JTextField();

これは、アクション リスナーが匿名の内部クラスであるためです。JLSの状態

内部クラスで宣言されていないローカル変数、仮パラメーター、または例外パラメーターは、final として宣言する必要があります。

別の方法として、クラスのインスタンス変数にすることもできます。

于 2013-11-09T11:47:07.890 に答える