2012-12-09 23 views
5

Tôi muốn thêm một ActionListener vào một nhóm các nút. Có lớp học nào bọc các nút không? Một cái gì đó như GroupJButtons hoặc một cái gì đó thường nhóm đối tượng? vì vậy tôi có thể đặt ActionListener cho tất cả chúng. Sau khi tất cả tôi không thực sự quan tâm mà các nút được nhấn Tôi chỉ muốn thay đổi văn bản của mình vì vậy tất cả tôi cần làm là đúc nó vào một JButton và thay đổi văn bản.Một ActionListener cho nhiều JButtons

Toàn bộ quá trình sẽ giảm các dòng mã trong 1 hoặc 2 (trong trường hợp bạn sử dụng vòng lặp) nhưng tôi muốn làm điều đó vì nó có vẻ hợp lý hơn.

+2

Nó là một giao diện rất khác thường có nhiều nút làm * chính xác * điều tương tự. Trường hợp sử dụng là gì? –

Trả lời

7

Trong trường hợp này bạn có thể mở rộng các lớp AbstractAction và chỉ cần áp dụng các hành động tương tự đối với nhiều nút .

class MyAction extends AbstractAction { 
     public MyAction(String text, ImageIcon icon, 
        String desc, Integer mnemonic) { 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 
    public void actionPerformed(ActionEvent e) { 
     //do the action of the button here 
    } 
    } 

Sau đó cho mỗi nút mà bạn muốn điều tương tự xảy ra bạn có thể:

Action myAction = new MyAction("button Text", anImage, "Tooltip Text", KeyEvent.VK_A); 
button = new JButton(myAction); 
+0

Giải pháp rất đẹp! Nhưng nó có vẻ hơi quá mức không? chỉ cho một nhóm các nút? –

+2

@Arno: nó dường như không quá giết tôi. 1+ cho câu trả lời hay. Bạn có thể tạo một đối tượng MyAction và sử dụng nó để tạo nhiều nút, nếu tất cả các nút sẽ có cùng văn bản và hành động. Bây giờ nếu các nút sẽ có các tiêu đề khác nhau, thì bạn có thể cần phải tạo một ActionListener sau đó được thêm vào một vài nút. –

+0

@HovercraftFullOfEels Ok, rất vui khi biết điều đó! –

4

Bạn có thể sử dụng để tạo ra từng nút

private JButton createButton(String title, ActionListener al) { 
    JButton button = new JButton(title); 
    button.addActionListener(al); 
    return button; 
} 

Và điều này để xử lý các hành động

public void actionPerformed (ActionEvent ae) { 
    JButton button = (JButton)ae.getSource(); 
    button.setText("Wherever you want"); 
}