JavaFX CSS 不工作

JavaFX CSS not working

我在处理此示例时遇到问题,因为它没有将背景边框窗格设置为绿色。 css 无论我怎么调整它都没有任何效果。 我的代码:

WhosebugQuestion.scala

import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.Scene
import scalafx.scene.control.Button
import scalafx.scene.layout.BorderPane

object WhosebugQuestion extends JFXApp {

   stage = new PrimaryStage {
      title = "Whosebug Sample"

      scene = new Scene {
         stylesheets add getClass.getResource("app.css").toExternalForm

         content = new BorderPane {
            id = "background"

            center = new Button {
               text = "Button"
            }
         }
      }
   }
}

app.css

#background {
    -fx-background-color: green;
}

我确实看到了这个相关的 post 但它没有答案 JavaFx Css not working with eclipse。我知道 css 正在被读取,因为如果我从 css

中删除大括号,它会打印错误

希望对你有所帮助

package application;

import java.io.IOException;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Whosebug extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {
        primaryStage.setTitle("JavaFX Welcome");
        BorderPane pane = new BorderPane();
        pane.setId("pane");

        Scene scene = new Scene(pane);

        primaryStage.setScene(scene);
        scene.getStylesheets().add(Welcome.class.getResource("application.css").toExternalForm());
        
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
#pane{
 -fx-background-color: green;
}

看着你的原始代码。布局问题比 CSS 更有可能。窗格被按钮覆盖,因此您看不到它。您需要确保窗格大于按钮,例如,为您添加填充 CSS:

#background {
    -fx-background-color: green;
    -fx-padding: 10;
}

这是我这样做时看到的:

您可能想要做的第二件事是将 content 更改为 root,这样您的窗格将填充 Scene,您将拥有

root = new BorderPane { ...

当您使用 root 时,您会直接在场景中放置一个窗格。限制是您只能将 Parent 分配给 root (这里没有问题)。当您使用 content 时,您可以分配任何 Node,但在分配给 root 之前,它首先被包装到 Group 中。在 Group 中包装会改变布局的完成方式,在您的情况下,将 BorderPane 的大小限制为其内容,而不是将其拉伸以匹配 Scene 大小。