如何在javafx中创建切换按钮?

如何在javafx中创建切换按钮?,java,javafx-2,Java,Javafx 2,我想创建一个如上所述的开关按钮 我是一个swt开发人员,在那里我经常得到这个小部件。 我可以在javafx中使用类似的东西吗?第一个倾向是扩展javafx标签,并添加一个按钮作为图形和一个SimpleBoleanProperty,用于收听。在切换标签的文本、样式和图形内容对齐方式的按钮上设置一个ActionEvent处理程序。下面的代码将帮助您开始,您可以使用样式和边界 package switchbutton; import javafx.beans.property.SimpleBoole

我想创建一个如上所述的开关按钮 我是一个swt开发人员,在那里我经常得到这个小部件。
我可以在javafx中使用类似的东西吗?第一个倾向是扩展javafx
标签
,并添加一个
按钮
作为图形和一个
SimpleBoleanProperty
,用于收听。在切换标签的文本、样式和图形内容对齐方式的按钮上设置一个
ActionEvent
处理程序。下面的代码将帮助您开始,您可以使用样式和边界

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; }
}
包装切换按钮;
导入javafx.beans.property.SimpleBoleAnProperty;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.scene.control.Button;
导入javafx.scene.control.ContentDisplay;
导入javafx.scene.control.Label;
公共类开关按钮扩展标签
{
私有SimpleBoleAnProperty switchedOn=新SimpleBoleAnProperty(true);
公共开关按钮()
{
按钮开关BTN=新按钮();
开关Btn.setPrefWidth(40);
setOnAction(新的EventHandler()
{
@凌驾
公共无效句柄(ActionEvent t)
{
switchedOn.set(!switchedOn.get());
}
});
设置图形(开关BTN);
switchedOn.addListener(新的ChangeListener()
{
@凌驾

public void changed(ObservalEvalue这难道不能通过两个绑定在一起的切换按钮(bind())来实现吗?每个按钮都有自己的CSS样式?实际上,CSS似乎是需要解决的(但可行的)部分


然后,你只需要让你的应用程序听两个按钮中的切换按钮,这两个按钮实际上可以实现你想要的功能。

controls FX项目提供了一个类似于你所寻找的切换按钮。

你可能想看一看。我知道这两个按钮并不完全相同,但功能基本相同。这是一个答案。答案是将两个按钮绑定在一起切换具有不同CSS样式的按钮。如果您认为这是错误的、不好的做法或没有用,正确的行为是对答案进行向下投票,而不是删除它。