如何自动调整JSplitPane?

时间:2015-08-12 18:53:48

标签: java swing resize 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表。当我单击一个按钮来更新数据时,Top_Label有时在html表中包含较少的数据行,并显示大量的空白空间。

现在,当Top_Label显示一个小的html表时,它将保持其原始大小,并留下大量空白空间,但在我将其调整到较小的空间并单击按钮以更新数据以获得大的html表,它不会扩大区域以适应更大的html表,但是当我手动移动分割条时,它足够智能,不会小于html表的高度,但如果有空的空间,它会让我收缩面积。

如何让Results_Split_Pane根据Top_Label的高度自动调整自身,这样当内容较少时,当Top_Label包含更多数据时,分割栏将更高到Top_Label中html表的高度,Results_Split_Pane的分割酒吧会降低吗?

2 个答案:

答案 0 :(得分:3)

JSplitPane没有自动调整功能。

我建议你可以:

  1. PropertyChangeListener
  2. 中添加JLabel
  3. 并聆听text事件
  4. 获取标签的首选尺寸
  5. 使用setDividerLocation(...)的{​​{1}}方法作为标签的首选高度。

答案 1 :(得分:1)

感谢" 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);
              }
            }
          };