Điều tôi muốn là: Tạo sự kiện kích hoạt nếu JRadioButton chứa trong ButtonGroup được chọn và sau đó in văn bản trên JRadioButton .Nghe trên ButtonGroup cho các thay đổi "con", và in văn bản đã chọn của JRadioButton
8
A
Trả lời
11
Theo nhận xét của tôi, bạn không thể thêm người nghe vào ButtonGroup. Bạn có thể sẽ phải đi với một ActionListener thêm vào JRadioButtons cá nhân.
Nếu điều này không trả lời được câu hỏi của bạn, vui lòng cho chúng tôi biết thêm chi tiết về sự cố của bạn.
Sửa 1
Tôi cho rằng bạn luôn có thể mở rộng ButtonGroup như vậy mà nó chấp nhận ActionListeners. Ví dụ:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.event.EventListenerList;
@SuppressWarnings("serial")
public class MyButtonGroup extends ButtonGroup {
private ActionListener btnGrpListener = new BtnGrpListener();
private EventListenerList listenerList = new EventListenerList();
@Override
public void add(AbstractButton b) {
b.addActionListener(btnGrpListener);
super.add(b);
}
public void addActionListener(ActionListener listener) {
listenerList.add(ActionListener.class, listener);
}
public void removeActionListener(ActionListener listener) {
listenerList.remove(ActionListener.class, listener);
}
protected void fireActionListeners() {
Object[] listeners = listenerList.getListenerList();
String actionCommand = "";
ButtonModel model = getSelection();
if (model != null) {
actionCommand = model.getActionCommand();
}
ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand);
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]== ActionListener.class) {
((ActionListener)listeners[i+1]).actionPerformed(ae);
}
}
}
private class BtnGrpListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
fireActionListeners();
}
}
}
Và thử nghiệm bởi những điều sau đây:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyButtonGroupTest {
private static void createAndShowUI() {
String[] data = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
JPanel panel = new JPanel(new GridLayout(0, 1));
MyButtonGroup myBtnGrp = new MyButtonGroup();
myBtnGrp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Action Command is: " + e.getActionCommand());
}
});
for (String text : data) {
JRadioButton radioBtn = new JRadioButton(text);
radioBtn.setActionCommand(text);
myBtnGrp.add(radioBtn);
panel.add(radioBtn);
}
JFrame frame = new JFrame("MyButtonGroupTest");
frame.getContentPane().add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
Nhưng điều này vẫn còn tiến thêm ActionListers cho mỗi JRadioButton để đạt được mục đích của nó; nó chỉ làm điều này đằng sau hậu trường trong ghi đè phương thức thêm của MyButtonGroup.
Các vấn đề liên quan
- 1. JRadioButton: cách thay thế văn bản bằng IconImage?
- 2. Nhận văn bản đã chọn và các nút đã chọn trên một trang?
- 3. Thay thế văn bản đã chọn trong vùng văn bản
- 4. Thay đổi màu văn bản trong các hộp CHỌN
- 5. Con trỏ văn bản Eclipse đã thay đổi và trình chỉnh sửa hoạt động khác nhau
- 6. Sự kiện cho thay đổi văn bản
- 7. Thay đổi Văn bản của Tùy chọn bằng jQuery
- 8. Thay đổi các biểu tượng đã chọn và bỏ chọn cho Hộp kiểm cho Android
- 9. Sao chép văn bản của Vùng đã Chọn vào clipboard
- 10. jQuery - trên văn bản nhập thay đổi
- 11. CSS để thay đổi kiểu con trỏ của nút thay đổi kích cỡ trên vùng văn bản
- 12. gitolite: chỉ cho phép thay đổi các tệp đã chọn
- 13. Tránh thay đổi con trỏ trên các trường văn bản động trong Flash CS3
- 14. Thay đổi văn bản "Chọn một tùy chọn ..." trên trang sản phẩm Magento
- 15. Chọn mục Hộp văn bản trong Hộp danh sách không thay đổi mục đã chọn của hộp danh sách
- 16. Nhận văn bản của mục đã chọn trong một ListBox
- 17. Làm cách nào để thay đổi màu của văn bản tùy chọn của hộp chọn?
- 18. Lấy văn bản đã chọn bằng CKEditor Plugin trên IE
- 19. Làm cách nào để thay đổi màu văn bản đã chọn?
- 20. Xóa văn bản của tất cả hộp văn bản trong tab đã chọn
- 21. Nút radio "Đã chọn = đã chọn" không thay đổi khi tùy chọn thay đổi
- 22. Cách thay đổi màu văn bản đã chọn Trong trình khám phá Internet?
- 23. Cách tạo ButtonGroup của JToggleButton cho phép bỏ chọn tùy chọn thực tế?
- 24. Thay đổi màu của tùy chọn đã chọn chỉ
- 25. jQuery đặt văn bản đã chọn
- 26. Thay đổi màu đánh dấu khi chọn văn bản trong đầu vào văn bản HTML
- 27. Lập trình thay đổi tab đã chọn của tabBarController
- 28. Thay đổi kích thước văn bản trên UIButton
- 29. jQuery: Cách nghe các thay đổi DOM?
- 30. thay đổi hướng văn bản của hộp văn bản tự động
Vui lòng xem Chỉnh sửa 1. –