我正试图通过将fxml集成到java中来获取解决方案最后阶段的GUI,并且它会在自动生成的代码上抛出错误:
<TableView layoutX="297.0" layoutY="156.0" prefHeight="237.0" prefWidth="523.0">
<columns>
<TableColumn editable="false" prefWidth="64.0" text="Element" />
<TableColumn editable="false" prefWidth="171.0" text="Weight Fraction" />
<TableColumn editable="false" prefWidth="188.0" text="Atom Fraction" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> <-------
</columnResizePolicy>
</TableView>
正在给予
Constant 'CONSTRAINED_RESIZE_POLICY' is not defined for 'TableView'
鉴于我已经无法按照https://docs.oracle.com/javafx/scenebuilder/1/use_java_ides/sb-with-nb.htm的指南进行操作,特别是关于拖放功能(将对象拖入make控制器只是提供xml而不是我可以使用的任何内容),这只会让人感到困惑
答案 0 :(得分:1)
尽管IDE中显示了此错误,应用程序仍将构建并正确运行。然而,在整个地方看到虚假的红色解释点是令人讨厌的。因此,在可以应用修复之前,安全的替代方法是使用TableView的columnResizePolicy方法在java代码中设置此属性:
myTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
答案 1 :(得分:0)
<fx:constant>
元素创建对类常量的引用。
这应该适用于JavaFX 2.2及更高版本。有一个解决方法:
RT-19228 - Defining TableView columnResizePolicy property with fxml
如果您使用的是早期版本的JavaFX,则必须升级它。
从您提供的链接中,您似乎正在使用SceneBuilder 1.0
,这可能是问题的原因。尝试升级它。
答案 2 :(得分:0)
这是一份有效的FXML文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<TableView layoutY="-1.0" prefHeight="400.0" prefWidth="600.0">
<columns>
<TableColumn editable="false" prefWidth="75.0" text="Element" />
<TableColumn editable="false" prefWidth="75.0" text="Weight Fraction" />
<TableColumn editable="false" prefWidth="75.0" text="Atom Fraction" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</Pane>
这与您上面的内容差不多,除了它具有该文件的其余结构。您必须确保TableView
控件嵌套在Container
中,但我认为您已经控制了它。
然后在您的启动代码中,您必须创建一个FXMLLoader
并加载此FXML文档,该文档将自动生成所有UI视图代码。您必须有一个Controller,并且可以在运行时通过FXMLLoader
指定Controller,或者在FXML文档中指定它(在SceneBuilder的左下角查看要粘贴package.subpackage.ClassName的地方)你的控制器。
以下是从磁盘加载FXML的项目示例:
以下是一个更简单的项目示例:
https://github.com/SnakeDoc/superD/blob/master/src/com/vanomaly/superd/Main.java#L37