我正在寻找一种方法将变量或字符串或任何东西传递给JButton的匿名actionlistener(或显式actionlistener)。这就是我所拥有的:
public class Tool {
...
public static void addDialog() {
JButton addButton = new JButton( "Add" );
JTextField entry = new JTextField( "Entry Text", 20 );
...
addButton.addActionListener( new ActionListener( ) {
public void actionPerformed( ActionEvent e )
{
System.out.println( entry.getText() );
}
});
...
}
}
现在我只是声明entry
是一个全局变量,但我讨厌这样做的方法。还有更好的选择吗?
答案 0 :(得分:10)
ActionListener
接口的类。JTextField
参数的构造函数。class Foo implements ActionListener{
private final JTextField textField;
Foo(final JTextField textField){
super();
this.textField = textField;
}
.
.
.
}
问题?
答案 1 :(得分:3)
2种方式
make entry
final
因此可以在匿名类中访问
public static void addDialog() {
JButton addButton = new JButton( "Add" );
final JTextField entry = new JTextField( "Entry Text", 20 );
...
addButton.addActionListener( new ActionListener( ) {
public void actionPerformed( ActionEvent e )
{
System.out.println( entry.getText() );
}
});
...
}
将entry
设为字段
JTextField entry;
public static void addDialog() {
JButton addButton = new JButton( "Add" );
entry = new JTextField( "Entry Text", 20 );
...
addButton.addActionListener( new ActionListener( ) {
public void actionPerformed( ActionEvent e )
{
System.out.println( entry.getText() );
}
});
...
}
答案 2 :(得分:1)
在这种情况下使用Action和AbstractAction可能更好,你可以在那里做那种事情。
答案 3 :(得分:1)
从我在这里看到的代码中,entry不是一个全局变量。它是addDialog()方法中的局部变量。我误解了你吗?
如果将本地变量声明为final,则侦听器将能够访问它。
final JTextField entry = new JTextField( "Entry Text", 20 );
...
addButton.addActionListener( new ActionListener( ) {
public void actionPerformed( ActionEvent e )
{
System.out.println( entry.getText() );
}
});
...