2011-02-04 38 views
8

就是這樣。我需要創建一個ButtonGroup,它允許選擇一個選項,或者,如果用戶點擊選定的選項,取消選擇該項目(不會選擇任何內容),當然,捕獲該事件來執行某些操作。如何創建允許取消選擇實際選項的JToggleButton的ButtonGroup?

+2

這也許不是直觀的用戶。你是否考慮過提供一個選項來表示與取消選擇相對應的狀態/選擇? – 2011-02-05 00:05:12

回答

9

萬一傑夫的鏈路在未來破,這裏就是我們的描述: 你繼承的ButtonGroup允許無選擇,並添加按鈕,這ButtonGroup中。

public class NoneSelectedButtonGroup extends ButtonGroup { 

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

或者一個匿名的內部類就足夠了,例如,`ButtonGroup myGroup = new ButtonGroup(){/ * code from * /};`` – captainroxors 2014-05-19 17:18:36

0

捕獲事件來做某件事。也做下面。

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

編輯: 但沒有涉及到ButtonGroup中。

0

解決方案前的Java 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

對未選擇按鈕/複選框做button.setSelected(false)時,我注意到怪異的行爲。它取消了所有的選擇,就好像我取消了一些選擇一樣。

我固定它是這樣的:

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else if (getSelection() != model) { 
     clearSelection(); 
    } 
    } 
} 
相關問題