2011-02-04 19 views
8

Vậy đó. Tôi cần phải tạo một ButtonGroup cho phép chọn một tùy chọn hoặc, nếu người dùng nhấp vào tùy chọn đã chọn, bỏ chọn mục (không có gì sẽ được chọn) và, tất nhiên, nắm bắt sự kiện để làm điều gì đó.Cách tạo ButtonGroup của JToggleButton cho phép bỏ chọn tùy chọn thực tế?

+2

Đó có thể không phải là trực quan cho người dùng. Bạn có nghĩ về việc đưa ra một tùy chọn để đại diện cho trạng thái/sự lựa chọn tương ứng với việc bỏ chọn không? –

Trả lời

9

Chỉ trong trường hợp liên kết của Jeff bị phá vỡ trong tương lai, đây là những gì được mô tả: bạn cần phải phân lớp ButtonGroup để cho phép một không lựa chọn, và thêm các nút của bạn này buttongroup.

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else { 
     clearSelection(); 
    } 
    } 
} 
+1

Hoặc một lớp bên trong vô danh sẽ đủ, ví dụ: 'ButtonGroup myGroup = new ButtonGroup() {/ * code từ trên * /};' – captainroxors

0

Ghi sự kiện để làm điều gì đó. Cũng làm như dưới đây.

@Override 
public void actionPerformed(ActionEvent e) { 
    ((JToggleButton)e.getSource()).setSelected(false); 
} 

EDIT: Nhưng không có ButtonGroup liên quan.

0

Giải pháp cho java trước 1,6

public class NoneSelectedButtonGroup extends ButtonGroup { 
    private AbstractButton hack; 

    public NoneSelectedButtonGroup() { 
     super(); 
     hack = new JButton(); 
     add(hack); 
    } 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
     super.setSelected(selected ? model : hack.getModel(), true); 
    } 
} 
0

tôi nhận thấy hành vi kỳ lạ khi làm button.setSelected(false) vào một nút/hộp mà không được chọn. Nó bỏ chọn mọi thứ như thể tôi đã bỏ chọn thứ gì đó.

tôi cố định nó theo cách này:

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else if (getSelection() != model) { 
     clearSelection(); 
    } 
    } 
} 
Các vấn đề liên quan