Java FXScene Builder加载到NetBeans中引发错误

时间:2015-06-12 17:23:02

标签: java netbeans javafx

我正试图通过将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而不是我可以使用的任何内容),这只会让人感到困惑

3 个答案:

答案 0 :(得分:1)

尽管IDE中显示了此错误,应用程序仍将构建并正确运行。然而,在整个地方看到虚假的红色解释点是令人讨厌的。因此,在可以应用修复之前,安全的替代方法是使用TableView的columnResizePolicy方法在java代码中设置此属性:

myTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

答案 1 :(得分:0)

根据FXML documentation

  

<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/MoneyBeets/Narvaro/blob/master/src/java/edu/csus/ecs/moneybeets/narvaro/Narvaro.java#L137

以下是一个更简单的项目示例:

https://github.com/SnakeDoc/superD/blob/master/src/com/vanomaly/superd/Main.java#L37