2013-07-04 22 views
6

Voglio creare un pulsante di commutazione come sopra enter image description here Sono uno sviluppatore swt in cui ho usato questo widget Switchbutton. Posso avere qualcosa di simile in JavaFXCome posso creare un pulsante di commutazione in javafx?

+0

Si consiglia di dare un'occhiata a http://docs.oracle.com/javafx/2/api/javafx/scene/control/ToggleButton.html. So che non è esattamente la stessa cosa, ma serve fondamentalmente la stessa funzionalità. –

risposta

14

Inclinazione primo è quello di estendere il JavaFX Label e aggiungere un Button come grafica e un SimpleBooleanProperty per l'ascolto. Impostare un gestore ActionEvent sul pulsante che commuta lo allineamento del testo, dello stile e del contenuto grafico dello Label. Il codice qui sotto ti farà iniziare e potrai giocare con lo stile e il limite.

package switchbutton; 

import javafx.beans.property.SimpleBooleanProperty; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.control.Button; 
import javafx.scene.control.ContentDisplay; 
import javafx.scene.control.Label; 

public class SwitchButton extends Label 
{ 
    private SimpleBooleanProperty switchedOn = new SimpleBooleanProperty(true); 

    public SwitchButton() 
    { 
     Button switchBtn = new Button(); 
     switchBtn.setPrefWidth(40); 
     switchBtn.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent t) 
      { 
       switchedOn.set(!switchedOn.get()); 
      } 
     }); 

     setGraphic(switchBtn); 

     switchedOn.addListener(new ChangeListener<Boolean>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Boolean> ov, 
       Boolean t, Boolean t1) 
      { 
       if (t1) 
       { 
        setText("ON"); 
        setStyle("-fx-background-color: green;-fx-text-fill:white;"); 
        setContentDisplay(ContentDisplay.RIGHT); 
       } 
       else 
       { 
        setText("OFF"); 
        setStyle("-fx-background-color: grey;-fx-text-fill:black;"); 
        setContentDisplay(ContentDisplay.LEFT); 
       } 
      } 
     }); 

     switchedOn.set(false); 
    } 

    public SimpleBooleanProperty switchOnProperty() { return switchedOn; } 
} 
1

non potrebbe questo essere fatto con due bottoni a commutazione che sono tenuti insieme (bind()) in cui ogni pulsante Get di essa la propria stile CSS? In realtà sembra che il CSS sia la parte difficile (ma fattibile) per avere ragione.

Quindi la tua app dovrebbe solo ascoltare il pulsante di attivazione dei due che fa effettivamente ciò che desideri?

+0

Questa è una risposta. La risposta dice di legare insieme due pulsanti di commutazione che hanno uno stile CSS diverso. Se ritieni che ciò sia sbagliato, una cattiva pratica o non utile, il comportamento corretto è di svalutare la risposta, non eliminarla. –

0

Il progetto FX di controlli fornisce un pulsante di commutazione come si cerca.

Problemi correlati