[英]How add ActionListener to dynamically created JButton?
我想動態創建一個帶有文本字段和兩個按鈕的JFrame
。 問題是JTextField
在JButton
的ActionListener
( 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)
:
必須將任何未在內部類中聲明的局部變量,形式化方法參數或異常處理程序參數聲明為final 。 必須在內部類主體之前明確分配在內部類中使用但未聲明的任何局部變量。
因此,根據您的情況,您需要將txt
更改為上述規則的最終版本。
final JTextField txt = new JTextField(10);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.