【问题标题】:JavaFx my css file is not workingJavaFx 我的 css 文件不工作
【发布时间】:2017-07-09 18:40:49
【问题描述】:

它之前工作过,但现在这里是截图

我正在运行的程序,显然不是。有人可以帮我吗?我是 JavaFX 的初学者。

Analog_clock.java

package analog_clock;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

/**
 *
 * @author ishansrivastava
 */
public class Analog_clock extends Application {

    @Override
    public void start(Stage primaryStage) {

        Circle circle = new Circle();
        circle.setCenterX(100.0f);
        circle.setCenterY(100.0f);
        circle.setRadius(50.0f);

        Group g = new Group();
        g.getChildren().add(circle);

        Pane bg = new Pane();
        //bg.setBackground(new Background(new BackgroundFill("-fx-color: #ACACE6", null,null)));
        bg.getChildren().add(g);

        Scene scene = new Scene(bg, 300, 250);
        scene.getStylesheets().add(this.getClass().getResource("style.css").toExternalForm());

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show()cl;
    }

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

}

style.css

.Circle
{
    -fx-stroke: #757575; /* sonic silver */
    -fx-fill: #00CC99; /* caribbean green */
}
.pane 
{
    -fx-background-color: #ACACE6; /* maximum blue purple */
}

谢谢你帮助我。

更新:

将我的 css 文件更改为此后:

.circle
{
    -fx-stroke: #757575; /* sonic silver */
    -fx-fill: #00CC99; /* caribbean green */
}
.root
{
    -fx-background-color: #ACACE6; /* maximum blue purple */
}

我的背景看起来是紫色的,因为我的代码中没有 没有名为 root 的东西。

【问题讨论】:

  • 欧文有什么问题?我没明白。
  • 为什么颜色没有像我在我的 css 文件中定义的那样出现?

标签: java css javafx


【解决方案1】:

如果您设置circlebgid,它应该可以工作:

circle.setId("circle");`
bg.setId("bg");

然后创建您的CSS 文件:

#circle{
    -fx-stroke: #757575; /* sonic silver */
    -fx-fill: #00CC99; /* caribbean green */
}

#bg{
    -fx-background-color: #ACACE6; /* maximum blue purple */
}

关于root这个词,我不太确定,但我认为它在JavaFX(特别是FXML语言)中具有特殊含义,这就是为什么它被理解为好像你定义了你的@987654332 @那个名字!不过,看看How to understand and use <fx:root> in JavaFX? 可能会有所帮助。

【讨论】:

  • 你是救生员。但我从未见过有人在没有 .或 # 在 css 文件中。还请检查更新:我在我的问题中提出。这可能是什么原因?
  • 还有我如何在不使用 # 的情况下为不同的圈子使用不同的样式?
  • root 是场景的特殊样式类(不能有用户定义的样式类)。
  • @MouseEvent OK.. 所以我的猜测是正确的。干杯。
  • @MouseEvent @Yahya 为什么事情没有按预期工作,就像在 javaFX 文档中一样,设置 id,这个命令被列出,但它不工作 outer_circle.getStyleClass().add("outer");
【解决方案2】:

你可以照原样做,有些地方你错过了,你可能不明白样式是如何与 css 一起工作的。

首先,当您将 syleSheet 添加到您的Scene 时,这意味着您对场景说:看这里是样式表,您可以从中使用这些东西。所以你不会立即将它们添加到背景、圆圈等组件中。

此外,虽然 Circle 是 Node,并且它实现了 Styleable,但您可以使用方法 getStyleClass() 来保存节点的所有样式(在本例中为 Circle),如果您想添加一些新的样式,你可以简单地这样做:(例如对于圆圈)circle.getStyleClass().add("cirle"); 当然,这在不设置样式表的情况下是行不通的。

还有一件事,你可以为每个节点指定样式表,如果你愿意,你可以为Pane使用一个样式表,为Circle使用另一个样式表。但通常我们在父节点使用样式表,然后添加为孩子们单独设计样式。

这就是您可以简单地使用样式的方法。我希望这是可以理解的。

【讨论】:

  • 有点难以理解,但我会回到它,因为我没有遵循教程(根据 reddit 上 30 多人的建议),只是边做边学,阅读文档,所以它会需要几天
  • 我无法在我的对话框中设置组件的样式,并且“这意味着您对场景说:看这里是您可以从中使用这些东西的样式表”帮助我理解/记住我没有在我的对话场景中调用 scene.getStylesheets().add("/styles.css");
【解决方案3】:
scene.getStylesheets().add(Analog_clock.class.getResource("/style.css").toExternalForm());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多