Как создать кнопку переключения в javafx?

Я хочу создать кнопку переключателя, как указано вышеenter image description here Я разработчик swt, где я использовал, чтобы получить этот виджет Switchbutton. Могу ли я иметь что-то подобное в javafx

3 ответов


первый наклон заключается в расширении JavaFX Label и добавить Button как графический и SimpleBooleanProperty для прослушивания. Установите ActionEvent обработчик на кнопке, которая переключает Label выравнивание текста, стиля и графического содержимого. Код ниже поможет вам начать работу, и вы можете играть со стилем и ограничением.

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; }
}

не может ли это быть сделано с двумя кнопками переключения, которые связаны вместе (bind ()), где каждая кнопка получает свой собственный стиль CSS? На самом деле кажется, что CSS будет сложной (но выполнимо) частью, чтобы получить право.

то ты просто не слушай тумблера из двух, что на самом деле делает то, что вы хотите?


проект controls FX предоставляет кнопку переключения, как вы ищете.