[英]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/SnakeDoc/superD/blob/master/src/com/vanomaly/superd/Main.java#L37
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.