我在FXML文件中指定ToggleButton的样式,如下所示:
<ToggleButton fx:id="Button" styleClass="defaultStyle">
稍后,在我的代码中,我按如下方式更改样式类:
@FXML private ToggleButton Button;
Button.getStyleClass().remove("defaultStyle");
Button.getStyleClass().add("newStyle");
CSS文件定义为:
.defaultStyle { -fx-background-color: black;}
.newStyle { -fx-background-color: red;}
EDITED: 在Controller中完成后应用新样式,但在其他地方完成时不应用新样式。当我调试时,我看到正在添加的样式类&amp;删除按钮。
任何人都有解决这个问题的方法吗?我提前感谢您的帮助。
答案 0 :(得分:0)
样式类删除和添加按预期工作。我想你的问题是没有正确注入ToggleButton,它应该是:
@FXML private ToggleButton Button;
...
Button.getStyleClass().remove("defaultStyle");
Button.getStyleClass().add("newStyle");
在控制器类中。注意“Button”的大写字母b,因为您在FXML文件中定义了fx:id="Button"
。另请注意,您无需自己实例化ToggleButton Button
(例如new ToggleButton()
)。
修改强>
这是更改样式列表的代码示例。正如我所说,它按预期工作。与你的比较。
Sample.fxml:
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml" fx:controller="somepackage.SampleController">
<stylesheets>
<String fx:value="somepackage/style.css" />
</stylesheets>
<children>
<ToggleButton layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="mybutton" styleClass="defaultStyle" />
</children>
</AnchorPane>
SampleController.java:
package somepackage;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ToggleButton;
public class SampleController implements Initializable {
@FXML
private ToggleButton mybutton;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("before :" + mybutton.getStyleClass());
mybutton.getStyleClass().remove("defaultStyle");
mybutton.getStyleClass().add("newStyle");
System.out.println("after :" + mybutton.getStyleClass());
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
MainDemo.java:
package somepackage;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MainDemo extends Application {
@Override
public void start(Stage stage) throws Exception {
System.out.println("version: " + com.sun.javafx.runtime.VersionInfo.getRuntimeVersion());
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
css文件包含你的选择器。
答案 1 :(得分:0)
因为你说只有在控制器完成时才会这样做。
使用FXMLLoader加载您的控制器。然后将StyleClass更改为newStyle。