2011-02-04 13 views
8

To wszystko. Potrzebuję utworzyć ButtonGroup, która pozwala wybrać opcję lub, jeśli użytkownik kliknie na wybraną opcję, odznaczyć przedmiot (nic nie zostanie wybrane) i, oczywiście, uchwycić zdarzenie, aby coś zrobić.Jak utworzyć ButtonGroup z JToggleButton, która pozwala odznaczyć opcję?

+2

To może nie być intuicyjne dla użytkownika. Czy zastanawiałeś się nad wyborem jednej opcji reprezentującej stan/wybór, który byłby zgodny z odznaczeniem? –

Odpowiedz

9

Tylko w przypadku łącza Jeffa jest uszkodzony w przyszłości, oto co jest opisane: trzeba podklasy buttonGroup aby umożliwić żadnej selekcji i dodać przyciski do tego buttongroup.

public class NoneSelectedButtonGroup extends ButtonGroup { 

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

Wystarczy anonimowa klasa wewnętrzna, np. 'ButtonGroup myGroup = new ButtonGroup() {/ * kod z powyższego * /};' – captainroxors

0

Uchwyć zdarzenie, aby coś zrobić. Wykonaj również poniższe czynności.

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

EDIT: Ale nie ma udział buttonGroup.

0

Roztwór do wstępnego 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

Zauważyłem dziwne zachowanie podczas wykonywania button.setSelected(false) w/przycisk wyboru, który nie został wybrany. Odznaczono wszystko tak, jakbym odznaczył coś.

Naprawiłem to w ten sposób:

public class NoneSelectedButtonGroup extends ButtonGroup { 

    @Override 
    public void setSelected(ButtonModel model, boolean selected) { 
    if (selected) { 
     super.setSelected(model, selected); 
    } else if (getSelection() != model) { 
     clearSelection(); 
    } 
    } 
} 
Powiązane problemy