2016-05-03 37 views
0

javafxでスタンドアロンのアプリケーション(SceneBuilder 8のFXML)を設計していますが、FXMLでCheckBoxTreeItem(下の画像を参照)を作成する必要があります。FXMLを使用してJavaFXでCheckBoxTreeItemを作成する方法

CheckBoxTreeItem

それを探している間、私はシーンビルダーにカスタマイズされたCheckBoxTreeItemのjavaファイルをインポートするために私を助けるが、シーンビルダでJAR分析レポートをインポートした後、エラーメッセージ「ではないノードをスローリンク「https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm」を得ました"

この問題を解決するのに役立つ人がいるか、FXMLでCheckBoxTreeItemを作成する方法が他にありますか。カスタマイズされたCheckBoxTreeItemコード以下

:ように

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(); 
    } 
} 

答えて

1

、それは本当にあなたが求めているものを行うにはどんな意味がありません。 FXMLの目的は、アプリケーションのレイアウト(ビュー)を定義することです。 CheckBoxTreeItemおよびTreeItemは一般にレイアウトの一部ではありません。それらはアプリケーション(すなわち、モデルの一部)に表示されるデータの一部です。

FXMLは、オブジェクトをインスタンス化してリンクする方法なので、FXMLを使用してこれを行うことはできません。ここでは、投稿のJavaのと同等です:

<?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> 

あなたがテストすることができ

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); 
    } 
} 

私は強くシーンビルダーが設計するためのツールがあるので、あなたは、シーンBuilderでこのFXMLを使用することができます疑いますアプリケーションのデータコンテンツを操作するためのツールではありません。

+0

ありがとうございましたJames、 はい、あなたは正しいです、シーンビルダはレイアウトを設計するためのツールであり、データコンテンツを操作するために別のJavaファイル(controller.java)を作成しました。 –

関連する問題