簡體   English   中英

Java FXScene Builder加載到NetBeans中會引發錯誤

[英]Java FXScene Builder load into NetBeans throwing errors

我試圖通過將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而不是我可以使用的任何東西),這進一步令人困惑。

盡管IDE中顯示了此錯誤,但該應用程序仍將生成並正確運行。 但是,令人討厭的是,到處都看到錯誤的紅色解釋點。 因此,在可以應用修復程序之前,一種安全的替代方法是使用TableView的columnResizePolicy方法在Java代碼中設置此屬性:

myTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

根據FXML文檔

<fx:constant>元素創建對類常量的引用。

這在JavaFX 2.2及更高版本上應該可以正常工作。 對此有一個解決方法:

RT-19228-使用fxml定義TableView columnResizePolicy屬性

如果使用的是JavaFX的早期版本,則必須對其進行升級。

從給出的鏈接看來,您正在使用SceneBuilder 1.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM