2011-09-04 152 views
5

我有4個按鈕排列在我的程序列中。截至目前,我有4個循環,檢查是否有按鈕被點擊或沒有。有沒有簡單的方法來檢查是否有任何按鈕被點擊,而不是循環遍歷每個列表,看看是否點擊了某個按鈕。必須有一個更簡單的方法來檢查「actionSource == anybutton」...Java動作監聽器

回答

20

使用匿名內部類爲每個按鈕:

JButton button = new JButton("Do Something"); 
button.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("Do Something Clicked"); 
    } 
}); 

或者,如果你的邏輯是相關的,那麼你就可以共享一個監聽器:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ButtonCalculator extends JFrame implements ActionListener 
{ 
    private JButton[] buttons; 
    private JTextField display; 

    public ButtonCalculator() 
    { 
     display = new JTextField(); 
     display.setEditable(false); 
     display.setHorizontalAlignment(JTextField.RIGHT); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.setLayout(new GridLayout(0, 5)); 
     buttons = new JButton[10]; 

     for (int i = 0; i < buttons.length; i++) 
     { 
      String text = String.valueOf(i); 
      JButton button = new JButton(text); 
      button.addActionListener(this); 
      button.setMnemonic(text.charAt(0)); 
      buttons[i] = button; 
      buttonPanel.add(button); 
     } 

     getContentPane().add(display, BorderLayout.NORTH); 
     getContentPane().add(buttonPanel, BorderLayout.SOUTH); 
     setResizable(false); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     JButton source = (JButton)e.getSource(); 
     display.replaceSelection(source.getActionCommand()); 
    } 

    public static void main(String[] args) 
    { 
     UIManager.put("Button.margin", new Insets(10, 10, 10, 10)); 
     ButtonCalculator frame = new ButtonCalculator(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

Camickr是我眼中的搖擺權威。 – duffymo

+0

分享聽衆......很好,謝謝你的建議!這工作完美! – mbreen

1

您可以爲每個按鈕添加一個單獨的偵聽器,併爲每個按鈕添加一個公共偵聽器。編程公共監聽器以響應「按下任何按鈕」。

0

任何時候你點擊一個按鈕,它觸發actionPerformed方法,無論您按下哪個按鈕。

public void actionPerformed(ActionEvent event) { 
    Object source = event.getSource(); 
    if (source instanceof JButton) System.out.println("You clicked a button!"); 
} 
+0

我還有其他的對象,如組合框和菜單項。我只需要按鈕來完成某個任務,而不是所有的項目都帶有一個監聽器。 – mbreen

+0

@mbreen查看更新的答案。 – fireshadow52