2017-10-19 6 views
0

J'ai un groupe de bascules avec deux boutons à bascule qui devrait ressembler à ceci (la bascule jaune est la bascule sélectionnée).Empêche la sélection d'un groupe de bascule - Java FX

enter image description here

Cependant, lorsque je clique sur le sélectionné bascule les deux deviennent non sélectionnés et permet de basculer ressemblent à ceci.

enter image description here

Alors si je tente d'obtenir si la bascule est sélectionné, je reçois un nullPointerException.

(Boolean) toggleGroup.getSelectedToggle().getUserData(); 

Est-il possible d'empêcher le désélection de l'option sélectionnée lorsque vous cliquez dessus?

+0

'RadioButton possède les fonctionnalités que vous recherchez. Pouvez-vous les utiliser à la place de 'ToggleButton's? –

Répondre

2

Vous pouvez essayer le code suivant pour créer une bascule persistante.

/** 
* Create a toggle group of buttons where one toggle will always remain switched on. 
*/ 
class PersistentButtonToggleGroup extends ToggleGroup { 
    PersistentButtonToggleGroup() { 
    super(); 
    getToggles().addListener(new ListChangeListener<Toggle>() { 
     @Override public void onChanged(Change<? extends Toggle> c) { 
     while (c.next()) { 
      for (final Toggle addedToggle : c.getAddedSubList()) { 
      ((ToggleButton) addedToggle).addEventFilter(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() { 
       @Override public void handle(MouseEvent mouseEvent) { 
       if (addedToggle.equals(getSelectedToggle())) mouseEvent.consume(); 
       } 
      }); 
      } 
     } 
     } 
    }); 
    } 
} 

Ce réagit simplement aux événements de souris, donc peut-être pas l'idéal si vous voulez tenir compte des événements de clavier ou changement dans le code permet de basculer.


Une approche similaire, mais peut-être plus complet que je ne l'ai pas essayé peut être défini dans l'entrée de blog Button of Choice: Use ToggleButtons as RadioButtons. Peut-être que le comportement le plus simple pour accomplir ce que vous désirez pourrait être d'utiliser simplement RadioButtons au lieu de ToggleButtons.

Si, en plus, vous souhaitez que les boutons soient de style ToggleButtons, au lieu de RadioButtons, vous pouvez essayer la technique de style décrite dans: How to make a RadioButton look like regular Button in JavaFX.

RadioButton radioButton=new RadioButton("Radio"); 
radioButton.getStyleClass().remove("radio-button"); 
radioButton.getStyleClass().add("toggle-button");