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
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);
}
}
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".
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!");
}
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
@mbreen Xem câu trả lời cập nhật. – fireshadow52
- 1. Cách thêm trình nghe hành động nghe nhiều nút
- 2. Trình nghe hành động trên nút radio
- 3. Đặt Trình nghe hành động theo lập trình trong IOS
- 4. Trình nghe thư mục trong Java
- 5. Trình nghe khóa Java trong Commandline
- 6. Tạo trình nghe tùy chỉnh Trong Java
- 7. Trình nghe Java trên hộp thoại đóng
- 8. Trình nghe Onlclick không hoạt động đúng ..?
- 9. Trình nghe hành động đối với JDialog cho nút được nhấp
- 10. Trình nghe tín hiệu - chỉ thực hiện hành động nếu một trường đã thay đổi
- 11. Tại sao các Nút có trình nghe và lệnh hành động không có trong LWUIT?
- 12. Dừng đồng hồ bấm giờ từ bên trong Trình nghe hành động
- 13. Phát triển cho hành động "Lắng nghe" mới trong Android
- 14. Trình nghe nhấp chuột đôi trên JTable trong Java
- 15. Trình nghe nhạc
- 16. Sự kiện Java và trình nghe sự kiện
- 17. Trình nghe Java phải kế thừa từ java.util.EventListener - tại sao?
- 18. Trình tự hành động WiX
- 19. Trình nghe tạo chủ đề
- 20. commandLink không gọi người nghe hành động, nhưng CommandButton hoạt động tốt
- 21. Trình nghe sự kiện 'keydown' của Javascript không hoạt động
- 22. Nhấp vào trình lắng nghe jQuery không hoạt động
- 23. Trình nghe lỗi Khởi động - JaxWS - JBoss dưới dạng 7
- 24. Java - Nghe thay đổi biến
- 25. Trình nghe mạng Android
- 26. Trình lắng nghe chrome.webRequest.onAuthRequired
- 27. Java hành vi hoạt động nhân
- 28. Android - trình nghe sự kiện
- 29. Android: trình nghe hộp kiểm
- 30. Selenium: Trình quản lý web: Có người nghe để ghi lại hành động của người dùng trong phiên trình duyệt do WebDriver đưa ra không?
Camickr là quyền hạn Swing trong mắt tôi. – duffymo
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