2016-10-28 2 views
0

У меня есть кнопка, которая показывает/скрывает jPanel, а затем вызывает pack(); но после сокрытия горизонтальной развязки jPanel, которая была между панелью и промежутком, которая была справа от этой панели, складывается и создает огромный горизонтальный зазор справа.Снятие правого горизонтального промежутка от скрытого jPanel

Я использую макет по умолчанию, который является макетом границы.

Вот что происходит сейчас: enter image description here

И как я хотел бы, чтобы она выглядела, как после того, как скрытие JPanel enter image description here

private void normalDistributionTableToggleActionPerformed(java.awt.event.ActionEvent evt) {                
    normalDistributionTablePanel.setVisible(!normalDistributionTablePanel.isVisible()); 
    pack(); 
    revalidate(); 
    repaint(); 
    System.out.println("Toggle normal distribution table."); 
} 
+0

1. 'revalidate();' и 'repaint()'; являются противоречивыми в контексте, вызываемых 'pack()', 2. все эти три строки кода могут быть бесполезными, если используется 'NullLayout'. 3. переопределите 'getPreferredSize' для всех' JPanel' (s), 4 используйте propotional 'LayoutManager', который принимает' getPreferredSize', 5. для лучшей помощи скорее опубликуйте 'SSCCE' /' MCVE', короткий, runnable, компилируемый с пустым 'JPanel' с использованием hardcoded 'Dimension' из' getPreferredSize' – mKorbel

ответ

1

Я использую раскладку по умолчанию, который является расположение границы.

Вы вложенные панели, которые используют разные менеджеры макетов. Если вы посмотрите на свое второе изображение с обоими показанными вами компонентами, вы увидите, что разрыв больше справа, чем слева.

Некоторые менеджеры компоновки, такие как FlowLayout, правильно обрабатывают видимость компонентов, поэтому пробел справа останется постоянным.

С другой стороны, если вы используете диспетчер компоновки, например BoxLayout, и добавляете «горизонтальную стойку» между компонентами, тогда, когда вы спрячете панель, вы узнаете, что есть две стойки вместе, что даст увеличенный пробел.

Если вы используете IDE для генерации кода, то у меня нет IDE, что делает код GroupLayout, но я бы предложил вам не использовать IDE и написать код макета вручную, чтобы вы могли лучше управлять им.

Не видя ваш простой демонстрационный код (SSCCE/MCVE), мы не можем дать конкретного решения.

+0

Да, я использую построитель GUI, я вставляю jpanels непосредственно в jframe, должен ли я следующий всех jpanels в одном jpanel, который затем смещен в jframe? Я считаю, что «горизонтальная стойка» - это именно то, что здесь происходит. – Higeath

+1

@Higeath, поэтому не используйте горизонтальную стойку справа от панели. Вместо этого вы можете использовать и 'EmptyBorder', чтобы предоставить больше места для панели. Затем, когда панель скрыта, EmptyBorder также скрыт. Дело в том, что если вы используете Swing и разрабатываете макет, вы можете иметь больше контроля, а затем позволить IDE делать макет и генерировать код. – camickr

Смежные вопросы