如何自动调整JSplitPane?

How to auto adjust JSplitPane?

在我的 Java Swing 应用程序中有一个垂直拆分的 JSplitPane,顶部是一个 JLabel,当我单击按钮更新一些信息时它可能会改变大小,底部是一个显示一些结果的 JPanel .

我的代码如下所示:

JLabel Top_Label=new JLabel();
Top_Label.setPreferredSize(new Dimension(1420,355));
JPanel Bottom_Panel=new JPanel();
Bottom_Panel.setPreferredSize(new Dimension(1420,445));
JSplitPane Results_Split_Pane=new JSplitPane(JSplitPane.VERTICAL_SPLIT,Top_Label,Bottom_Panel);

Top_Label 中包含一个 html table。当我点击一个按钮更新数据时,Top_Label有时在htmltable中包含较少的数据行并且显示很多空space。

现在Top_Label显示小htmltable时,会保持原来的大小,并留出很多空space,但之后我把它调小了space然后点击按钮更新数据有一个大的htmltable,它不会放大区域以适应更大的htmltable,但是当我手动移动拆分条时,它足够智能,不会小于 html table 的高度,但是如果 space 是空的,它会让我缩小面积。

如何让Results_Split_Pane根据Top_Label的高度自动调整自己,这样当内容少的时候,split bar会上移到[=29=的高度] table 在 Top_Label 中,当 Top_Label 包含更多数据时,Results_Split_Pane 的拆分条会变低 ?

A JSplitPane 没有自动调整功能。

我建议你可以:

  1. PropertyChangeListener 添加到您的 JLabel
  2. 并监听 text 事件
  3. 获取标签的首选尺寸
  4. 使用JSplitPanesetDividerLocation(...)方法作为标签的首选高度。

感谢 "camickr",我得到了完美的答案,跳过第 3 步并使用“-1”,这样 JSplitPane 将自动调整到它的大小,效果很好。这是听众:

          Results_Top_Label.addPropertyChangeListener(Property_Change_Listener);
...
          PropertyChangeListener propertyChangeListener=new PropertyChangeListener()
          {
            @Override
            public void propertyChange(PropertyChangeEvent event)
            {
        //    Out("[x] : "+event.getPropertyName());
              if (event.getSource() instanceof JLabel && event.getPropertyName().equals("html")) 
              {
        //      Out(((JLabel)event.getSource()).getName()+" : Height = "+Results_Top_Label.getPreferredSize().height);
                Results_Split_Pane.setDividerLocation(-1);
              }
            }
          };