我是javaFX的新手。我創建了一個自定義的搜索框(擴展TextField)在Java中,檢查圖像:如何在java中爲已創建的新組件創建FXML文件,而不是將其添加到場景構建器中?
我有一個測試類測試它和它的工作。
我想知道現在是否可以創建FXML文件,而不是將此組件添加到場景構建器中?怎麼做 ?提前致謝。
我是javaFX的新手。我創建了一個自定義的搜索框(擴展TextField)在Java中,檢查圖像:如何在java中爲已創建的新組件創建FXML文件,而不是將其添加到場景構建器中?
我有一個測試類測試它和它的工作。
我想知道現在是否可以創建FXML文件,而不是將此組件添加到場景構建器中?怎麼做 ?提前致謝。
如何從JAR導入組件到SceneBuilder
你可以把你的組件在一個罐子裏,並將其導入到SceneBuilder。您不需要爲組件創建FXML文件,以將其添加到SceneBuilder庫面板。
查看JavaFX用戶指南的Adding Custom Components to the Library部分。
要從JAR或FXML文件導入自定義GUI組件:
選擇導入JAR/FXML從庫面板中的菜單文件命令,或者 拖動JAR或FXML文件直接從系統的本機文件 管理器(資源管理器或Finder)中將其放入庫面板中
在打開對話框窗口中,導航到您要導入的JAR或FXML 文件的位置。顯示類似於Figure 8-4中所示的 的導入對話框。檢查JAR文件的內容爲 ,並確定爲 合適的自定義組件的所有Java類都顯示在對話窗口中。對FXML文件的內容進行解析,以確保添加的組件 有效並且是獨立的。
從「導入」對話框窗口中,選擇或取消選擇要導入的項目列表 中的項目。
點擊導入組件。導入的項目被添加到庫面板的自定義 部分。他們可以立即使用它們 圖書館堅持場景生成器重新啓動
注後,也SceneBuilder還支持基於FXML組件,而不僅僅是直代碼組件的進口。此答案僅討論僅導入不包含FXML的代碼組件。
樣品進口組合使用
這裏是我使用以上概述的方法導入到SceneBuilder定製搜索場分量。
頂部搜索面板是在場景生成器設計窗格,上下求索麪板使用場景生成器預覽功能,尋找幸福的結果。
樣品SceneBuilder生成的代碼
這是由SceneBuilder基於這裏包含的設計產生的FXML文件。請注意,這只是我用SceneBuilder創建的測試場景,用於測試已導入的組件 - 它不是組件導入過程本身的一部分。
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import org.jewelsea.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label text="Search Field Import Test">
<font>
<Font size="16.0" />
</font>
</Label>
<SearchField />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
樣品(導入的)組件代碼
爲其導入的搜索框的代碼是:
package org.jewelsea;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
public class SearchField extends StackPane {
private final TextField textField;
private final Button searchButton;
private final Label searchResults;
public SearchField() {
textField = new TextField();
textField.setPromptText(
"Search Text"
);
searchButton = new Button("Search");
searchResults = new Label();
VBox layout = new VBox(
20,
new HBox(
10,
textField,
searchButton
),
searchResults
);
layout.setPadding(new Insets(10));
searchButton.setOnAction(event ->
searchResults.setText(
"Search result for " + textField.getText()
)
);
getChildren().setAll(
layout
);
}
}
元器件的先決
爲了該過程工作,有幾件事情需要確保:
故障排除
如果您在導入JAR,你已經嘗試了JAR導入後,您可以使用下面介紹的JAR分析功能,以幫助排除故障(這可能有助於或可能只是提供問題一些神祕的信息讓你更加困惑)。
感謝您的回答。我沒有將eclipse項目導出到jar文件中。但場景構建器沒有檢測到任何組件?該java文件需要任何額外的信息?或遵循一個結構? – ben 2015-04-04 10:05:43
哦,我的上帝!感謝所有這些!我喜歡它 !真的感謝 !我會重做我的組件:D謝謝 – ben 2015-04-04 21:13:02