当前位置: 首页 > 知识库问答 >
问题:

以编程方式设置. fxml文件

闻人高卓
2023-03-14

我习惯于用JavaFx编写如下所示的代码,因为这就是我几年前学习的方式。

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.stage.*;

public class test extends Application {
    int c=0;
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Demo");
        Button b = new Button("Click me");
        Label l = new Label("Count=" + c);
        VBox v = new VBox(20);
        v.getChildren().addAll(b, l);
        b.setOnAction(event -> {
            c++;
            l.setText("Count=" +c);
        });
        primaryStage.setScene(new Scene(v, 300, 300));
        primaryStage.show();
    }
}

我最近安装了JetBrains IntelliJ IDEA Ultimate Edition 2018.1.6,我发现要打开primaryStage窗口,我需要一个fxml文件。

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.GridPane?>
<GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main">
</GridPane>

我必须这么做,

primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("sample.fxml")), 300, 300));

如果我运行第一个代码片段,什么都不会显示。但是如果我用FXMLLoader.load(getClass(). getResources("sample.fxml"))替换VBox v,只会显示一个没有按钮和标签的窗口。有没有一种方法可以忽略fxml文件的使用?或者我可以使用标准的编码方式(第一个代码片段)并让编译器为我将其更改为fxml格式?

这是因为当每个标签是一个像素时,我希望在网格布局中有100x100个标签。因此,在代码中,很容易运行嵌套for循环,以使用二维数组初始化和寻址每个标签。但是在fxml中初始化1000个标签太长、太累而且不合逻辑。

在JetBrains IntelliJ IDEA社区版2017.0.2中,我从未做过这样的事情。当我升级到Ultimate Edition 2018.1.6时,我发现了这些错误。

共有1个答案

班言
2023-03-14

您完全可以在不使用FXML的情况下将IntelliJ与JavaFX结合使用。

问:有没有一种方法可以忽略fxml文件的使用?

答:考虑到您在创建新的JavaFX项目时从IntelliJ获得的默认设置中引用的代码片段,是的,他们的默认设置使用. fxml,但不需要使用它。您可以删除该sample.fxml文件并根据需要重写start

旁注:没有什么可以阻止您在同一个项目中同时使用fxml和代码方法,在某些情况下,使用fxml是更好的方法,而在其他一些情况下,最好使用代码。

问:或者我可以使用标准的编码方式(第一个代码片段)并让编译器为我将其更改为fxml格式?

A: 没有办法将Java代码转换为fxml,但正如我已经说过的,这取决于您决定使用哪一个,您甚至可以在同一个项目中同时使用这两个代码。

 类似资料:
  • 如何在Spring Boot应用程序中设置活动配置文件。该应用程序将部署在独立的Tomcat中。 我有2个属性文件应用程序-{profile}。属性。

  • 问题内容: 我正在尝试在应用程序启动期间进行设置,但似乎为时已晚,非无头模式已经启动: 除此之外,还有另一种方法让无头为真吗?我不希望在控制台上进行任何配置。 问题答案: 我正在使用一个类,该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。 将静态加载块移到类的顶部解决了我的问题。 这不起作用: 通过将Java移动到类的顶部,让Java尽早执行该静态块! 当考虑它时,这是完全有

  • 问题内容: 我正在使用logback,并且尝试在Java程序中以编程方式设置日志文件名(类似于以编程方式设置LogbackAppender路径),并且我尝试按以下方法调整该解决方案: 在logback-test.xml中: 然后再次在我的Java程序中: 但是结果是两个日志,一个完整并按我的意愿命名,例如“ 1319041145343.log”,另一个为空并命名为“ log_file_name_I

  • 有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。

  • 问题内容: 有没有一种方法可以通过编程设置属性?似乎没有方法。 明确地说,我不是在谈论视图/窗口小部件样式!我在谈论以下内容: 问题答案: setTypeface是属性textStyle。 正如 Shankar V 添加的那样,要保留以前设置的字体属性,可以使用:

  • 问题内容: 我的问题很简单 如何以编程方式设置我的按钮layout_gravity? 我在互联网上找到了它,但它只是抛出了一个Nullpointer异常: 有什么办法吗? 问题答案: Java Kotlin 有关重力值以及如何设置重力,请检查“重力”。 基本上,您应该选择依赖于父项。可以是等等。