我习惯于像下面给出的那样用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,则只显示一个没有Button和Label的窗口。 有没有一种方法可以忽略fxml文件的使用?还是可以使用标准的编码方式(第一个代码段),让编译器为我将其更改为fxml格式?
这是因为当每个Label为一个像素时,我希望在网格布局中具有100x100个Label。因此,在代码中,很容易运行嵌套的for循环以使用2-d数组初始化和寻址每个Label。但是在fxml中初始化1000个标签太冗长,费力且不合逻辑。
我从不需要在JetBrains IntelliJ IDEA社区版2017.0.2中执行这些操作。当我升级到Ultimate Edition 2018.1.6时,出现了这些错误。
答案 0 :(得分:1)
您可以肯定将IntelliJ与JavaFX一起使用,而无需FXML。
问:有没有一种方法可以忽略fxml文件的使用?
A:考虑到您在创建新的JavaFX项目时从IntelliJ获得的默认设置中引用的代码段,是的,它们的默认设置使用.fxml
,但不需要使用它。您可以删除该sample.fxml
文件并根据需要重写start
。
附带说明:没有什么可以阻止您在同一项目中同时使用fxml和代码方法,在某些情况下,使用fxml是更好的方法,而在另一些情况下,最好使用代码。
问:或者我可以使用标准编码方式(第一个代码段),让编译器为我将其更改为fxml格式吗?
A:无法将Java代码转换为fxml
,但是正如我已经说过的那样,您可以决定使用哪个代码,甚至可以同时使用两者他们在同一项目中。