任何人都可以建议我使用JavaFX创建一个开/关切换按钮的方法,如下图所示。
我试图找到一种方法,但无法得到它。
答案 0 :(得分:5)
<强>更新强>
ControlsFX有一个ToggleSwitch控件。
我使用JavaFX创建了一个简单的ToggleSwitch。这是一个非常基本的模型,但会帮助您了解如何对自己的更复杂的控制。
以下是我的代码的gist。
如果您想知道它的外观:
很少有其他ToggleSwitch可用(我从未尝试过):
答案 1 :(得分:1)
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);
}
}