Java 如何将变量设置为与用户输入到JDialog中的变量相等?

Java 如何将变量设置为与用户输入到JDialog中的变量相等?,java,swing,actionlistener,jdialog,Java,Swing,Actionlistener,Jdialog,因此,我试图从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 = ne

因此,我试图从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按钮上需要一个actionlistener,但是当我这样做的时候,局部变量就不能使用了,现在我很困惑。如何使局部变量与用户输入的变量相等?

您需要在按钮中添加一个操作侦听器,以便捕获单击事件

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();
这是因为动作监听器是一个匿名的内部类。美国

在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为final


另一种选择是将其作为类的实例变量。

您需要向按钮添加操作侦听器,以便捕获单击事件

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();
这是因为动作监听器是一个匿名的内部类。美国

在内部类中使用但未声明的任何局部变量、形式参数或异常参数都必须声明为final


另一种选择是将其作为类的实例变量。

因此,如果我将所有输入设为最终输入,那么我可以在actionlistener中使用它们?因为我想这会解决我的问题@benharris是的,如果声明为final,您可以访问它们。因此,如果我将所有输入设置为final,那么我可以在actionlistener中使用它们?因为我想这会解决我的问题@benharris是的,如果声明为最终版本,您可以访问它们。