【问题标题】:JTree enlarges width when a node gets expanded当节点扩展时,JTree 会扩大宽度
【发布时间】:2011-08-20 19:57:50
【问题描述】:

JTree 遇到了一个真正的难题。

我已经实现了一个带有自写模型的 JTree(从 TreeModel 扩展而来)。

    fileSystemModel = new MyModel(new File(directory));
    fileTree = new JTree(fileSystemModel);
    fileTree.setEditable(true);
    fileTree.setDragEnabled(true);
    fileTree.addTreeSelectionListener(new TreeSelectionListener() {

        public void valueChanged(TreeSelectionEvent event) {
            File file = (File) fileTree.getLastSelectedPathComponent();
        }
    });

所以我将它添加到 JPanel 中,并将此 JPanel 添加到 JFrame 中。

不,我遇到了这个问题:我启动框架,如果我展开单个节点,JTree 的宽度将扩大到显示叶子所需的宽度。

我试图设置这个:

fileTree.setMaximumSize(width, height);

但它失败了,我还尝试将 JTree 嵌入到具有最大尺寸的 JScrollPanel 中,这也失败了。

JTree 仍在根据需要调整其宽度。

所以我现在试了两天,没有找到任何东西,所以如果你们中的任何人可以帮助我,我将不胜感激。

谢谢!

【问题讨论】:

  • 我必须将此 JPanel 嵌入到 JSplitPane 中
  • 我必须将此 JPanel 嵌入到具有 GridBagLayout 的 JSplitPane 中。我现在尝试启动一个默认 JFrame 并且只嵌入我的 JPanel 并且它可以工作。但它在带有 JSplitPane 的框架中不起作用......
  • 永远不要使用任何 setXXSize - 即使在最好的情况下,它们弊大于利 ;-) 在不了解它们的行为的情况下将 LayoutManager 随机堆积在 LayoutManager 之上并不完全有效(正如你所注意到的:- ) 也就是说,JScrollPane 中的 JTree 不应该使 scrollPane 增加其大小(因为 scrollPane 是一个验证根),而只是根据需要显示滚动条。如需更多帮助,请展示一个小 (!) 可运行示例来演示问题

标签: java swing width jtree expand


【解决方案1】:

所描述的效果是JPanel 的默认FlowLayout 的特征。点击左侧面板可以看到变化是这个example。

附录:如example中所见,GridLayout允许组件扩展;它特别适用于setVisibleRowCount(),然后是pack()。

【讨论】:

  • 对不起,您能告诉我您是如何解决问题的吗?因为我使用 BorderLayout 并在 WEST 插入 JTree,但我遇到了同样的问题,这有点难看。
  • @user2896152:Benni 好久没见了;如果您发布依赖于example cited 的新问题,请在此处回复。
  • 我在这里创建了另一个问题stackoverflow.com/questions/30377017/…
猜你喜欢
  • 2010-10-05
  • 2017-12-31
  • 2015-10-23
  • 2012-05-18
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多