首页 文章

无法将样式表添加到javafx

提问于
浏览
0

我是Java和JavaFX的新手,在这里遇到问题 . 我试图将一个css文件添加到javafx应用程序,但我只是得到错误“未找到Resource Style.css” . 大部分代码都基于我在YouTube上发现的教程 . css文件与Main.java文件位于同一目录中 . 我不确定这是否是将样式表添加到javafx的正确方法,但这适用于教程 .

package sample;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class Main extends Application {

    Stage window;

    public static void main(String[] args){
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        window = primaryStage;
        window.setTitle("Title");

        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setVgap(8);
        grid.setHgap(10);

        //Name label
        Label nameLabel = new Label("Username:");
        GridPane.setConstraints(nameLabel, 0 ,0);

        //Name input
        TextField nameInput = new TextField("Emil");
        GridPane.setConstraints(nameInput, 1, 0);

        //Password label
        Label passLabel = new Label("Password:");
        GridPane.setConstraints(passLabel, 0, 1);

        //Password input
        TextField passInput = new TextField();
        passInput.setPromptText("password");
        GridPane.setConstraints(passInput, 1, 1);

        //Login button
        Button loginButton = new Button("Log In");
        GridPane.setConstraints(loginButton, 1, 2);

        grid.getChildren().addAll(nameLabel, nameInput, passLabel, passInput, loginButton);

        Scene scene = new Scene(grid, 600, 350);
        scene.getStylesheets().add("Style.css");
        window.setScene(scene);
        window.show();

    }

}

2 回答

  • 1

    假设您的css文件与Main.java位于同一目录中,请尝试添加您的css,如下所示:

    String css = this.getClass().getResource("Style.css")
                    .toExternalForm();
            scene.getStylesheets().add(css);
    

    编辑:因为你的css文件在同一个目录中,它应该像这样工作 . 抱歉,在你的问题中覆盖了这句话 .

    通常你的类文件被编译成一个bin目录(如果你使用eclipse),但是你没有你的css ressource,这就是为什么它找不到

  • 0

    在Windows上,我发现 parent.setStyle(stylesheet) 不起作用,但 parent.getStylesheets().add(css) 确实有效 provided ,css只包含正斜杠,而不是反斜杠 . 例如, parent.getStylesheets().add("file:\\c:\\workspace\\Insights\\stylesheet1.css"); 不起作用,但 parent.getStylesheets().add("file:/c:/workspace/Insights/stylesheet1.css") 确实有效 .

相关问题