JavaFX:在主类之外更改CSS文件

JavaFX:在主类之外更改CSS文件,java,css,javafx,Java,Css,Javafx,有一个与此相关的问题已经得到了回答,但我想知道如何在主类外部和控制器内部或者一些更合适的类中更改CSS文件 package calc; import javafx.event.ActionEvent; import javafx.fxml.FXML; public class Controller { @FXML private void skinSelector(ActionEvent event) { // Where the magic happens!

有一个与此相关的问题已经得到了回答,但我想知道如何在主类外部和控制器内部或者一些更合适的类中更改CSS文件

package calc;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;

public class Controller {
    @FXML
    private void skinSelector(ActionEvent event) {
        // Where the magic happens!
    }
}

这可能会对你有所帮助

main.fxml

<Pane fx:id="rootPane" stylesheets="@theme1.css" styleClass="pane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <children>
        <Button layoutX="200.0" layoutY="200.0" onAction="#press" text="Button" />
     </children>
</Pane>
主题1.css

.pane{
    -fx-background-color: red;
}
.pane{
    -fx-background-color: black;
}
主题2.css

.pane{
    -fx-background-color: red;
}
.pane{
    -fx-background-color: black;
}

与往常一样:抓取场景并创建你想要的样式表如果你想更改场景中的样式表,而不仅仅是根目录中的样式表,那么你可以将
rootPane.getStylesheets()
替换为
rootPane.getScene().getStylesheets()
@James\D这通常没有意义,我的窗格是根面板。当然,这取决于用例,但是如果您希望在将新的FXML文件加载到同一场景后保持更改,例如,您需要在场景上设置样式表。