java - JTree 不显示在 JScrollPane 内

标签 java swing jscrollpane jtree

我需要为我的程序显示帐户名称,我想使用 JScrollPane 中的 JTree 来完成此操作。

这是我的代码:

public void loadAccounts() {

    accountsRoot = new DefaultMutableTreeNode("Accounts"); //create root

    accountsRoot.add(new DefaultMutableTreeNode("Fred")); //add one element
                                                          //for testing
    accounts = new JTree(accountsRoot);

    accountsPane = new JScrollPane(accounts);

    accountsPane.add(accounts);  //don't think this is necessary
    canvas.add(accountsPane);
    accounts.setBounds(0, 0, accountsPane.getWidth(), accountsPane.getHeight());
    accountsPane.setBounds(460, 270, 240, 410);
    accounts.setVisible(true);
    accountsPane.setVisible(true);

}

因为我没有使用布局,所以我手动设置了边界。

我似乎无法让它显示出来。我想最终加载一段时间后的帐户,所以我认为 JTree 会很容易,

最佳答案

accountsPane = new JScrollPane(accounts);

accountsPane.add(accounts);  //don't think this is necessary

这不仅没有必要,而且会把事情搞砸,因为这实际上会将您的帐户 JTree 添加到多个容器中——添加到 JScrollPane 的视口(viewport)(好的)和添加到 JScrollPane 本身(坏的)。不要那样做。只能通过上面第一行所示的 JScrollPane 构造函数或在创建 JScrollPane 对象后调用 setViewportView(...) 将其添加到 JScrollPane 的视口(viewport)。

编辑:另一个问题是您对 setBounds(...) 的使用。您不应该这样做,而应该使用布局管理器来正确查看您的组件。您还需要在接受 JScrollPane 的任何容器上调用 revalidate()repaint()

关于java - JTree 不显示在 JScrollPane 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005483/

相关文章:

java - JScrollPane 中的 JTable 具有可调整大小的 JFrame 固定大小?

Java 通过引用传递

java - 在 SonarQube 中运行单元测试时出现内存错误—— fork VM 没有正确说再见就终止了

java - 在我最小化 JFrame 或调整其大小之前,JMenu 不会出现

java - 如何设置JButton的背景?

jquery - chrome中的jScrollPane 2.0高度问题

java - JScrollPane:重新验证后滚动位置

java - 如何在 TreeViewer 中选择特定节点?

java - 继承问题(java)

java - 更改 TreeNode 的名称而不更改 userObject