gpt4 book ai didi

java - 为什么此 FXML 应用程序中不显示 TreeView 根?

转载 作者:行者123 更新时间:2023-12-01 10:50:44 25 4
gpt4 key购买 nike

我正在开发一个 FXML 应用程序,并且遇到了这个错误,我无法解决:由附加代码生成的 TreeViews 不显示其根,即​​使据我所知,它们应该显示(TreeViews他们自己确实表现出来)。按钮和标签工作正常。

顺便说一句,initialize() 方法到底应该做什么?目前,我只是在那里写一些东西,就像他们在教程中所做的那样,并希望它以某种方式出现。我发现的关于该方法的所有内容都是关于 Initialized 接口(interface)的文档,这并没有让我变得更明智。关于位置和资源的一些信息,但这对于 Java 来说到底意味着什么?这些术语太笼统,无法通过 Google 搜索。

此外,代码是从早期的应用程序复制过来的,该应用程序仅使用 Javafx,没有 FXML,并且在那里运行得很好。那么为什么现在不起作用呢?

    package sample;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;

import java.io.IOException;

public class FolderSyncerMainWindowController {

final String FOLDER_SYNCER = "FolderSyncer";
final String BROWSE = "Browse";
final String SOURCE = "Source...";
final String TARGET = "Target...";
final String COMPARE = "Compare";
final String CANCEL = "Cancel";
final String SYNCHRONIZE = "Synchronize";
final String COMPARING = "Comparing, this may take several minutes.";
final String SYNCHRONIZING = "Synchronizing, this may take several minutes.";
final String DONE = "Done.";


@FXML
private Label sourceLabel;
@FXML
private Label targetLabel;
@FXML
private Button sourceBrowseButton;
@FXML
private Button targetBrowseButton;
@FXML
private Button compareButton;
@FXML
private Button synchronizeButton;
@FXML
private TreeView sourceTreeView;
@FXML
private TreeView targetTreeView;
@FXML
private TreeItem sourceTreeViewRoot;
@FXML
private TreeItem targetTreeViewRoot;


public void initialize() {
sourceLabel.setText(SOURCE);
targetLabel.setText(TARGET);
sourceBrowseButton.setText(BROWSE);
targetBrowseButton.setText(BROWSE);
compareButton.setText(COMPARE);
synchronizeButton.setText(SYNCHRONIZE);
sourceTreeViewRoot = new TreeItem<>();
targetTreeViewRoot = new TreeItem<>();
sourceTreeViewRoot.setExpanded(true);
targetTreeViewRoot.setExpanded(true);
sourceTreeView = new TreeView<>(sourceTreeViewRoot);
targetTreeView = new TreeView<>(targetTreeViewRoot);
sourceTreeView.setShowRoot(true);
targetTreeView.setShowRoot(true);

}
}

最佳答案

这个论坛上有几个相同的问题,但我无法通过快速搜索找到它们。

初始化@FXML总是错误的- 带注释的字段。换句话说,你永远不应该编写这样的代码

@FXML
private TreeView sourceTreeView ;

// ...

sourceTreeView = new TreeView<>(...);

@FXML注释意味着该字段引用 FXMLLoader 创建的对象作为解析 fxml 文件的一部分;该对象被添加到场景图中。如果您随后使用 sourceTreeView = new TreeView... 重新分配引用,则引用不再指向场景图一部分的 TreeView 。

相反,这样做

sourceTreeView.setRoot(sourceTreeViewRoot);

顺便说一句,您永远不应该使用原始类型( TreeView ),而应该使用适当的泛型类型: TreeView<Something> ,其中Something是每个树项中值的类型。

关于java - 为什么此 FXML 应用程序中不显示 TreeView 根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33930561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com