【问题标题】:Javafx - how to modify components in fxml file after loading itJavafx - 加载后如何修改fxml文件中的组件
【发布时间】:2014-04-15 14:59:46
【问题描述】:

我是 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。所以我想在我的控制器类的 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。请指导我。

【问题讨论】:

    标签: javafx


    【解决方案1】:

    要解决此问题,请替换

    tree = new TreeView<>(rootItem);
    

    tree.setRoot(rootItem);
    

    有关原因的解释,请参阅this discussion

    您还必须修正TreeView 的声明:

    @FXML
    private TreeView<String> tree;  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 2016-01-07
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2019-09-29
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多