在javaFX中创建滑动式开/关“切换”按钮

vin*_*eth 5 javafx

谁能建议我一种使用JavaFX创建打开/关闭开关按钮的方法,如下图所示。

在此处输入图片说明

我试图找到一种方法,但是找不到。

Mei*_*wjn 8

聚会晚了 4 年,但也许更多的人偶然发现了这个问题。 我稍微修改了 ItachiUchiha 的代码片段。这只是另一种设计,圆圈与条形重叠。

开关按钮

import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;

public class SwitchButton extends StackPane {
    private final Rectangle back = new Rectangle(30, 10, Color.RED);
    private final Button button = new Button();
    private String buttonStyleOff = "-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.2), 0.2, 0.0, 0.0, 2); -fx-background-color: WHITE;";
    private String buttonStyleOn = "-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.2), 0.2, 0.0, 0.0, 2); -fx-background-color: #00893d;";
    private boolean state;

    private void init() {
        getChildren().addAll(back, button);
        setMinSize(30, 15);
        back.maxWidth(30);
        back.minWidth(30);
        back.maxHeight(10);
        back.minHeight(10);
        back.setArcHeight(back.getHeight());
        back.setArcWidth(back.getHeight());
        back.setFill(Color.valueOf("#ced5da"));
        Double r = 2.0;
        button.setShape(new Circle(r));
        setAlignment(button, Pos.CENTER_LEFT);
        button.setMaxSize(15, 15);
        button.setMinSize(15, 15);
        button.setStyle(buttonStyleOff);
    }

    public SwitchButton() {
        init();
        EventHandler<Event> click = new EventHandler<Event>() {
            @Override
            public void handle(Event e) {
                if (state) {
                    button.setStyle(buttonStyleOff);
                    back.setFill(Color.valueOf("#ced5da"));
                    setAlignment(button, Pos.CENTER_LEFT);
                    state = false;
                } else {
                    button.setStyle(buttonStyleOn);
                    back.setFill(Color.valueOf("#80C49E"));
                    setAlignment(button, Pos.CENTER_RIGHT);
                    state = true;
                }
            }
        };

        button.setFocusTraversable(false);
        setOnMouseClicked(click);
        button.setOnMouseClicked(click);
    }
}
Run Code Online (Sandbox Code Playgroud)


Ita*_*iha 6

更新资料

ControlsFX具有ToggleSwitch控件。

拨动开关


我使用JavaFX创建了一个简单的ToggleSwitch。这是一个非常基本的模型,但可以帮助您了解如何对自己的控件进行更复杂的处理。

这是我代码的要点

如果您想知道,它看起来如何:

在此处输入图片说明

可用的其他ToggleSwitches很少(我从未尝试过):

  1. JFXtras
  2. JavaFX Metro主题ToggleSwitch