2011-02-04 2 views
8

Вот и все. Мне нужно создать ButtonGroup, которая позволяет выбрать параметр или, если пользователь нажмет на выбранную опцию, отмените выбор элемента (ничего не будет выбран) и, конечно же, захватите событие, чтобы что-то сделать.Как создать ButtonGroup JToggleButton, который позволяет отменить выбор фактической опции?

+2

Это не может быть интуитивно понятным для пользователя. Вы думали о том, чтобы сделать один вариант представления состояния/выбора, который соответствовал бы отмене выбора? –

ответ

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() {/ * код сверху * /};' – captainroxors

0

Захват события, чтобы что-то сделать. Также сделайте следующее.

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

EDIT: Но нет 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(); 
    } 
    } 
} 
Смежные вопросы