JavaFx我的css文件不起作用

时间:2017-07-09 18:40:50

标签: java css javafx

它工作得比较早,但现在这里是截图screenshot

我正在运行的程序

显然不是。有人可以帮我这个吗?我是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 的内容。

3 个答案:

答案 0 :(得分:1)

如果您设置id&的circle bg,它应该有效:

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 */
}

enter image description here

关于root这个词,我不太确定,但我认为它在JavaFX(特别是FXML语言)中有特殊含义,这就是为什么它已被理解为您使用该名称定义了Pane bg!但是,请查看How to understand and use <fx:root> in JavaFX?它可能有所帮助。

答案 1 :(得分:1)

你可以像开始那样做,有一些你错过的点,可能你不明白造型如何与css一起使用。

首先,当您将syleSheet添加到Scene时,这意味着您对场景说:看这里是您可以使用这些内容的样式表。因此,您不要将它们立即添加到背景,圆圈等组件中。

此外,虽然Circle是Node,并且它实现了Styleable,但您拥有方法getStyleClass(),其中包含节点的所有样式(在本例中为Circle),如果你想添加一些新的样式,你可以简单地这样做:(例如对于圆圈)circle.getStyleClass().add("cirle");当然,如果没有设置样式表,这将无效。

还有一件事,你可以为每个节点指定样式表,如果你想要,可以为Pane使用一个样式表,为Circle使用另一个样式表。但通常我们在父级使用样式表节点,然后分别为子项添加样式。

所以这就是你如何简单地使用造型。我希望这是可以理解的。

答案 2 :(得分:0)

scene.getStylesheets().add(Analog_clock.class.getResource("/style.css").toExternalForm());