Как создать ButtonGroup из JToggleButton, что позволяет отменить выбор фактической опции? - PullRequest
9 голосов
/ 05 февраля 2011

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

Ответы [ 5 ]

10 голосов
/ 24 мая 2013

На случай, если в будущем ссылка Джеффа будет разорвана, вот что описано: вам нужно создать подкласс ButtonGroup, чтобы разрешить отсутствие выбора, и добавить свои кнопки в эту группу кнопок.

public class NoneSelectedButtonGroup extends ButtonGroup {

  @Override
  public void setSelected(ButtonModel model, boolean selected) {
    if (selected) {
      super.setSelected(model, selected);
    } else {
      clearSelection();
    }
  }
}
5 голосов
/ 05 февраля 2011

Это показывает, как именно это сделать http://java.dzone.com/articles/unselect-all-toggle-buttons

1 голос
/ 06 марта 2014

Я заметил странное поведение при выполнении 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();
    }
  }
}
0 голосов
/ 02 марта 2014

Решение для pre 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 голосов
/ 02 июня 2013

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

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

РЕДАКТИРОВАТЬ: Но не участвует ButtonGroup.

...