gpt4 book ai didi

java - 如何将ActionListener添加到动态创建的JButton中?

转载 作者:行者123 更新时间:2023-12-01 23:08:01 26 4
gpt4 key购买 nike

我想动态创建一个带有文本字段和两个按钮的 JFrame。问题是 JTextFieldJButtonActionListener 内不可见 (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();
}
});
}
});

最佳答案

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

Any local variable, formal method parameter or exception handler parameter used but not declared in an inner class must be declared final. Any local variable, used but not declared in an inner class must be definitely assigned before the body of the inner class.

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

final JTextField txt = new JTextField(10);

关于java - 如何将ActionListener添加到动态创建的JButton中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com