簡體   English   中英

將參數傳遞給JButton ActionListener

[英]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是一個全局變量,但我討厭這樣做的方式。 還有更好的選擇嗎?

  1. 創建一個實現ActionListener接口的類。
  2. 提供具有JTextField參數的構造函數。

示例 -

class Foo implements ActionListener{
    private final JTextField textField;

    Foo(final JTextField textField){
        super();
        this.textField = textField;
    }
    .
    .
    .
}

問題?

2種方式

  1. 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() ); } }); ... } 
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM