我想创建一个类似上面的开关按钮
我是一名Swt开发人员,我曾经使用过这个小部件 Switchbutton。
在JavaFX中有类似的东西吗?
我想创建一个类似上面的开关按钮
我是一名Swt开发人员,我曾经使用过这个小部件 Switchbutton。
在JavaFX中有类似的东西吗?
首先想到的是扩展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是最棘手(但可行)的部分,需要注意确保正确性。
然后你只需要让你的应用程序监听其中一个切换按钮即可实现所需功能?