如何添加ActionListener来动态创建JButton?

时间:2014-03-18 12:13:00

标签: java swing jbutton actionlistener

我想动态创建一个带有文本字段和两个按钮的JFrame。问题是在JTextField ActionListenerJButton)的treePanel.addObject(txt.getText());内看不到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(); } }); } }); 。如何解决这个问题?

{{1}}

1 个答案:

答案 0 :(得分:3)

匿名类是内部类,严格规则适用于内部类 (JLS 8.1.3)

  

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

因此,在您的情况下,您需要将txt更改为关于上述规则的最终决定。

final JTextField txt = new JTextField(10);