wie eine Komponente aus einer JAR in SceneBuilder Importieren
Sie Ihre Komponente in einem Glas legen und es in SceneBuilder importieren. Sie müssen keine FXML-Datei für Ihre Komponente erstellen, um sie dem SceneBuilder-Bibliotheksfenster hinzuzufügen.
Siehe Abschnitt Adding Custom Components to the Library des JavaFX-Benutzerhandbuchs.
Um benutzerdefinierte GUI-Komponenten aus einer JAR oder FXML Datei zu importieren:
Wählen Import JAR/FXML Datei Befehl aus dem Menü des Bibliotheksfenster oder ziehen die JAR oder FXML Datei direkt von der systemeigenen Datei Manager (Explorer oder Finder) und legen Sie es in das Bedienfeld Bibliothek
In dem Dialogfeld zu öffnen, Navigieren Sie zum Speicherort der JAR- oder FXML-Datei , die Sie importieren möchten. Der Import-Dialog wird ähnlich wie in angezeigt. Der Inhalt der JAR-Datei wird überprüft, und alle Java-Klassen, die als geeignete benutzerdefinierte Komponenten bestimmt werden, werden in dem Dialogfeld angezeigt. Der Inhalt der FXML-Datei wird analysiert, um sicherzustellen, dass die Komponente, die hinzugefügt wird, gültig und in sich abgeschlossen ist.
Wählen Sie im Dialogfeld Importieren die Elemente aus der Liste der Elemente, die Sie importieren können, aus oder ab.
Klicken Sie auf Komponenten importieren. Importierte Elemente werden zum benutzerdefinierten Abschnitt des Bedienfelds Bibliothek hinzugefügt. Sie können sofort verwendet werden und sie in der Bibliothek bleiben auch nach Scene Builder Neustart
Hinweis, SceneBuilder unterstützt auch den Import von FXML basierten Komponenten anstatt nur gerade Code-Komponenten. Diese Antwort behandelt nur das Importieren von Nur-Code-Komponenten, die keine FXML enthalten.
Beispiel Imported Component-Verwendung
Hier ist eine benutzerdefinierte Suchfeldkomponente, die ich in SceneBuilder importiert oben beschriebenen Anwendung des Verfahrens.
Das Top-Suchfeld im Design-Fenstern Scene Builder ist, ist das untere Suchfeld das Ergebnis der Szene Builder Vorschau-Funktion und für das Glück zu suchen.
Probe SceneBuilder-Code generiert
Die fxml Datei, die durch SceneBuilder Basis erzeugt wurde auf das Design hier enthalten ist. Beachten Sie, dass dies nur eine Testszene war, die ich mit SceneBuilder erstellt habe, um die bereits importierte Komponente zu testen - sie war nicht Teil des Komponentenimportprozesses.
<?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>
Probe (importierbar) Component-Code
Der Code für das Suchfeld, die importiert wurde, ist:
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
);
}
}
Komponente Voraussetzungen
Damit der Prozess zu arbeiten, gibt es ein paar Dinge, die Sie sicherstellen müssen:
- Ihre Komponentenklasse erweitert Node.
- Ihre Komponentenklasse hat einen Konstruktor ohne Argumente.
- Ihre Komponentenklasse und kein Argumentkonstruktor sind öffentlich.
- Ihre Komponentenklasse ist in einem Paket (z. B. org.jewelsea) - es kann kein Paket festgelegt werden.
- Ihre Komponentenklasse ist in einer JAR-Datei gepackt, die wie oben beschrieben in SceneBuilder importiert wurde.
Fehlerbehebung
Wenn Sie Probleme haben die JAR-Import, nachdem Sie eine JAR-Import versucht haben, können Sie die JAR-Analysefunktion dokumentiert unter Fehlerbehebung helfen können (die nur helfen könnte oder könnte vorsehen einige kryptische Informationen, um dich mehr zu verwirren).
Danke für Ihre Antwort. Ich habe das Eclipse-Projekt in eine JAR-Datei exportiert. aber Szenenerzeuger erkennt keine Komponente? Benötigt die Java-Datei zusätzliche Informationen? oder einer Struktur folgen? – ben
OH MEIN GOTT! Danke für alles! ICH LIEBE ES ! Wirklich Danke! Ich werde meine Komponenten überarbeiten: D danke – ben