[英]Pass arguments into JButton ActionListener
我正在尋找一種方法將變量或字符串或任何東西傳遞給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
是一個全局變量,但我討厭這樣做的方式。 還有更好的選擇嗎?
ActionListener
接口的類。 JTextField
參數的構造函數。 class Foo implements ActionListener{
private final JTextField textField;
Foo(final JTextField textField){
super();
this.textField = textField;
}
.
.
.
}
問題?
2種方式
final
entry
這樣就可以在匿名類中訪問它
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() ); } }); ... }
在這種情況下,使用Action和AbstractAction可能更好,你可以在那里做那種事情。
從我在這里看到的代碼,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() );
}
});
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.