Java 如何将ActionListener添加到动态创建的JButton?

Java 如何将ActionListener添加到动态创建的JButton?,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,我想动态创建一个带有文本字段和两个按钮的JFrame。问题在于JButton(treePanel.addObject(txt.getText());)的ActionListener中看不到JTextField)。如何解决这个问题 JButton addButton = new JButton("Add"); addButton.setActionCommand(ADD_COMMAND); addButton.addActionListener(new Action

我想动态创建一个带有文本字段和两个按钮的
JFrame
。问题在于
JButton
treePanel.addObject(txt.getText());
)的
ActionListener
中看不到
JTextField
)。如何解决这个问题

JButton addButton = new JButton("Add");
        addButton.setActionCommand(ADD_COMMAND);
        addButton.addActionListener(new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent event) 
            {
                JFrame f = new JFrame("Add new group/subgroup");
                JPanel p = new JPanel(new MigLayout());
                p.add(new JLabel("Group/subgroup name: "));
                JTextField txt = new JTextField(10);
                JButton ok = new JButton("Ok");
                JButton cancel = new JButton("Cancel");
                p.add(txt,"wrap");
                p.add(ok); 
                p.add(cancel);
                f.add(p);

                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);                    
                f.pack();
                f.setLocationRelativeTo(null);
                f.setVisible(true);
                ok.addActionListener(new ActionListener() 
                {
                    @Override
                    public void actionPerformed(ActionEvent event)
                    {
                        treePanel.addObject(txt.getText()); 
                    }
                });
                cancel.addActionListener(new ActionListener() 
                {
                    @Override
                    public void actionPerformed(ActionEvent event)
                    {
                        f.dispose();    
                    }
                });
            }
        });

匿名类是内部类,严格的规则适用于内部类

在内部类中使用但未声明的任何局部变量、形式方法参数或异常处理程序参数必须声明为final。 在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值

因此,在您的情况下,您需要将
txt
更改为上述规则的最终版本

final JTextField txt = new JTextField(10);

匿名类是内部类,严格的规则适用于内部类

在内部类中使用但未声明的任何局部变量、形式方法参数或异常处理程序参数必须声明为final。 在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值

因此,在您的情况下,您需要将
txt
更改为上述规则的最终版本

final JTextField txt = new JTextField(10);

匿名类是内部类,严格的规则适用于内部类

在内部类中使用但未声明的任何局部变量、形式方法参数或异常处理程序参数必须声明为final。 在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值

因此,在您的情况下,您需要将
txt
更改为上述规则的最终版本

final JTextField txt = new JTextField(10);

匿名类是内部类,严格的规则适用于内部类

在内部类中使用但未声明的任何局部变量、形式方法参数或异常处理程序参数必须声明为final。 在内部类中使用但未声明的任何局部变量必须在内部类的主体之前明确赋值

因此,在您的情况下,您需要将
txt
更改为上述规则的最终版本

final JTextField txt = new JTextField(10);

txt
设置为
final
或实例变量。另外请阅读。将
txt
设置为
final
或实例变量。另外请阅读。将
txt
设置为
final
或实例变量。另外请阅读。将
txt
设置为
final
或实例变量。也可以读到。