2016-05-03 9 views
0

Ich erstelle eine Standalone-App in Javafx (FXML mit Scenebuilder 8), jetzt muss ich ein CheckBoxTreeItem (siehe Bild unten) in FXML erstellen.Wie erstelle ich ein CheckBoxTreeItem in JavaFX mit FXML

CheckBoxTreeItem

Während für sie die Suche ich einen Link „https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm“ bekam, die mir helfen, eine maßgeschneiderte CheckBoxTreeItem Java-Datei in Szene Builder zu importieren aber JAR Analysebericht in Szene Builder löst eine Fehlermeldung „nicht ein Knoten nach dem Import ".

Kann mir jemand helfen, dieses Problem zu lösen, oder gibt es eine andere Möglichkeit, ein CheckBoxTreeItem in FXML zu erstellen.

unter der angepassten CheckBoxTreeItem Code:

package Action; 
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.control.cell.CheckBoxTreeCell; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class ComboboxTree extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 
    public void start(Stage primaryStage) { 
     CheckBoxTreeItem<String> rootItem = 
      new CheckBoxTreeItem<String>("Total list"); 
     rootItem.setExpanded(true); 

     final TreeView tree = new TreeView(rootItem); 
     tree.setEditable(true); 

     tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView()); 
     for (int i = 0; i < 8; i++) { 
      final CheckBoxTreeItem<String> checkBoxTreeItem = 
       new CheckBoxTreeItem<String>("List " + (i+1)); 
        rootItem.getChildren().add(checkBoxTreeItem); 
     } 

     tree.setRoot(rootItem); 
     tree.setShowRoot(true); 

     StackPane root = new StackPane(); 
     root.getChildren().add(tree); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 
} 

Antwort

1

In gewisser Weise ist es nicht wirklich einen Sinn zu tun, was Sie fragen. Der Zweck von FXML besteht darin, das Layout (d. H. Die Ansicht) für Ihre Anwendung zu definieren. CheckBoxTreeItem s und TreeItem s sind im Allgemeinen nicht Teil des Layouts; Sie sind Teil der Daten, die in der Anwendung (d. h. Teil des Modells) angezeigt werden.

Nichtsdestoweniger ist FXML nur eine Möglichkeit, Objekte zu instanziieren und sie miteinander zu verknüpfen, also gibt es keinen Grund, warum Sie FXML nicht dazu verwenden können. Hier ist das Äquivalent der Java Sie auf dem Laufenden:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.layout.HBox?> 
<?import javafx.scene.control.TreeView?> 
<?import javafx.scene.control.CheckBoxTreeItem?> 
<?import javafx.scene.control.cell.CheckBoxTreeCell?> 

<HBox xmlns:fx="http://javafx.com/fxml/1"> 
    <TreeView editable="true"> 
     <root> 
      <CheckBoxTreeItem value="Total list" expanded="true"> 
       <children> 
        <CheckBoxTreeItem value="List 1"/> 
        <CheckBoxTreeItem value="List 2"/> 
        <CheckBoxTreeItem value="List 3"/> 
        <CheckBoxTreeItem value="List 4"/> 
        <CheckBoxTreeItem value="List 5"/> 
        <CheckBoxTreeItem value="List 6"/> 
        <CheckBoxTreeItem value="List 7"/> 
        <CheckBoxTreeItem value="List 8"/> 
       </children> 
      </CheckBoxTreeItem> 
     </root> 
     <cellFactory> 
      <CheckBoxTreeCell fx:factory="forTreeView"/> 
     </cellFactory> 
    </TreeView> 
</HBox> 

, die Sie testen können mit

import java.io.IOException; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws IOException { 
     primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("TreeWithCheckBoxItems.fxml")), 600, 600)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Ich bezweifle stark Sie diese FXML mit Scene Builder verwenden können, da Scene Builder ist ein Werkzeug, das für die Gestaltung Layout, kein Werkzeug zum Manipulieren des Dateninhalts Ihrer Anwendung.

+0

Danke James, Ja, Sie haben Recht, Scene Builder ist ein Tool zum Entwerfen des Layouts und ich habe eine separate Java-Datei (controller.java) erstellt, um Dateninhalt zu manipulieren. –

Verwandte Themen