有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何自动调整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_标签中包含一个html表。当我单击按钮更新数据时,顶部的标签有时在html表中包含较少的数据行,并显示大量空白

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

如何让Results_Split_Pane根据Top_标签的高度自动调整自己,以便当内容较少时,拆分栏会升高到Top_标签中html表的高度,当Top_标签包含更多数据时,Results_Split_Pane的拆分栏会降低


共 (2) 个答案

  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);
                  }
                }
              };
    
  2. # 2 楼答案

    AJSplitPane没有自动调整功能

    我建议你可以:

    1. PropertyChangeListener添加到JLabel
    2. 听一听text事件
    3. 获取标签的首选大小
    4. 使用JSplitPanesetDividerLocation(...)方法作为标签的首选高度