2011-09-04 41 views
5

Tôi có 4 danh sách các nút được sắp xếp thành cột trong chương trình của tôi. Hiện tại tôi có 4 vòng kiểm tra xem một nút đã được nhấp hay chưa. Có cách nào đơn giản để kiểm tra xem có nút nào đã được nhấp thay vì lặp qua từng danh sách để xem liệu nút nào đó đã được nhấp hay chưa. Phải có cách dễ dàng hơn để kiểm tra xem "actionSource == anybutton" ...Trình nghe hành động Java

Trả lời

20

Sử dụng lớp bên trong vô danh cho mỗi nút:

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

Hoặc nếu logic của bạn có liên quan, sau đó bạn có thể chia sẻ một người biết lắng nghe:

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 là quyền hạn Swing trong mắt tôi. – duffymo

+0

Chia sẻ người nghe ... tốt đẹp, cảm ơn lời khuyên! Điều đó làm việc hoàn hảo! – mbreen

1

Bạn có thể thêm người nghe riêng lẻ cho mỗi nút và một người nghe thông thường vào mỗi nút. Lập trình trình nghe thông dụng để trả lời "bất kỳ nút nào được nhấn".

0

Bất cứ lúc nào bạn bấm vào một nút, nó kích hoạt actionPerformed phương pháp, bất kể bạn nhấn nút nào.

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

Tôi vẫn có đối tượng khác với người nghe trên đó, chẳng hạn như hộp tổ hợp và mục menu. Tôi chỉ cần các nút để thực hiện một tác vụ nhất định, không phải tất cả các mục có trình nghe. – mbreen

+0

@mbreen Xem câu trả lời cập nhật. – fireshadow52

Các vấn đề liên quan