2015-08-12 4 views
1

В моем приложении Java Swing есть JSplitPane, который разбивается по вертикали, верхняя часть - это JLabel, которая может изменить размер, когда я нажимаю кнопку, чтобы обновить некоторую информацию, нижняя часть - JPanel, которая показывает некоторые результаты.Как настроить автонастройку JSplitPane?

Мой код выглядит следующим образом:

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 table, он не будет увеличивать область, чтобы соответствовать этой более крупной таблице html, и все же, когда я вручную перемещаю разделительную панель, она достаточно умна, чтобы не идти меньше высоты таблицы html, но если есть пустое пространство, это позволит я сжимаю область.

Как настроить автозагрузку Results_Split_Pane в соответствии с высотой Top_Label, так что, когда количество контента меньше, разделительная панель будет повышаться до высоты таблицы html в Top_Label, когда Top_Label содержит больше данных, результаты Results_Split_Pane разделительная панель пойдет ниже?

ответ

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); 
       } 
      } 
      }; 
3

A JSplitPane не имеет функции автоматической регулировки.

Я хотел бы предложить вам удалось:

  1. добавить PropertyChangeListener к вашему JLabel
  2. и слушать для text события
  3. получить предпочтительный размер этикетки
  4. использовать setDividerLocation(...) метод из JSplitPane, чтобы быть предпочтительной высотой этикетки.
Смежные вопросы