Javafx - 如何在加载后修改fxml文件中的组件

时间:2014-04-15 14:59:46

标签: javafx

我是javafx的新手。我创建了一个简单的javafx fxml应用程序。我在我的fxml文件中定义了一个treeView。如下,

FXMLDocument.fxml

 <AnchorPane id="AnchorPane" prefHeight="200.0" prefWidth="320.0" xmlns:fx="http://javafx.com/fxml/1"      xmlns="http://javafx.com/javafx/2.2" fx:controller="scenebuilderfirst.FXMLDocumentController">
   <children>
     <TreeView id="" fx:id="tree" layoutX="60.0" layoutY="14.0" prefHeight="172.0" prefWidth="200.0" />
   </children>
 </AnchorPane>

并创建控制器类,如下所示,

FXMLDocumentController.java

 public class FXMLDocumentController implements Initializable {

     @FXML
     private TreeView<?> tree;   

     @Override
     public void initialize(URL url, ResourceBundle rb) {

     }    
 }

我的主要java文件如下,

MyApp.java

 public class SceneBuilderFirst extends Application {

     @Override
     public void start(Stage stage) throws Exception {
         AnchorPane root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

         Scene scene = new Scene(root);

         stage.setScene(scene);
         stage.show();

     }

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

现在我需要在运行程序时将树项添加到TreeView。所以我想在我的contorller类的initialize()方法中编写以下代码的和平,

    // creating root item for the tree
    TreeItem<String> rootItem = new TreeItem<>("root");
    rootItem.setExpanded(true);
    //creating childern for the tree
    TreeItem<String>item1= new TreeItem<>("content1");
    rootItem.getChildren().add(item1);
    TreeItem<String>item2= new TreeItem<>("content2");
    rootItem.getChildren().add(item2);

    //attaching root item to tree
    tree = new TreeView<>(rootItem);

但它没有用。

我需要在运行程序时设置TreeItems。不是通过fxml文件。 所以我想我应该在我的主java文件中进行编码 我需要一种方法来通过我的主java文件中的FXMLLoader 加载后访问我的TreeView,这样我就可以自己选择创建一个TreeView,并在运行程序时将它附加到这个TreeView。请指导我。

1 个答案:

答案 0 :(得分:1)

要解决此问题,请替换

tree = new TreeView<>(rootItem);

tree.setRoot(rootItem);

有关原因的说明,请参阅this discussion

您还必须修改TreeView的声明:

@FXML
private TreeView<String> tree;