2016-07-20 2 views
-1

enter image description here У меня есть верхняя панель с раскладкой, которая имеет текстовое поле и метку. Мне нужно добавить дополнительные текстовые поля и метки ниже первой строки. Я понял, что нет реального способа заставить новую линию в flowlayout, поэтому я просто собирался создать новую панель и поставить ее под верхнюю. Проблема заключается в том, что теперь существует разрыв, потому что высота верхних панелей слишком высока. Есть ли способ изменить размер панели так, чтобы ее ширина автоматически настраивалась на экраны, но я хочу отрегулировать высоту новой панели, поэтому разрыв меньше. Два текстовых поля вверху находятся на верхней панели с расходом потока. 3 текстовых поля ниже находятся в новой панели с расходом потока, есть ли способ сделать 3 текстовых поля прямо под 2 текстовыми полями вверх? Кроме того, весь кадр находится в gridlayout.Регулировка высоты JPanel

frame.setLayout(new GridLayout(0,1)); 
Static JPanel topPanel = new JPanel(new flowlayout); 
Static JPanel searchPanel = new JPanel(new flowlayout); 
Static JPanel statusPanel = new JPanel(new gridLayout(2,1)); 
Static JPanel categoryPanel = new JPanel(new GridLayout(0.2)); 
Static JPanel btnPanel = new JPanel(new GridLayout(0,3)); 
frame.pack(); 
topPanel.add(searchPanel); 
JPanel container2 = new JPanel(new BorderLayout()): 
container2.add(topPanel, BorderLayout.North); 
frame.getContentPane().add(container2); 
frame.getContentPane().add(statusPanel); 
frame.getContentPane().add(catergoryPanel); 
frame.getContentPane().add(btnPanel); 
+1

* "Любые рекомендации?" * 1) [ 'упаковка()'] (http://docs.oracle.com/javase/8/docs/api/java/awt/Window.html#pack -) 2) Для лучшей помощи раньше, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). 3) Предоставьте ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. –

+0

Я использую пакет, и я добавил картинку для лучшего понимания. Спасибо –

+0

* «Я использую пакет, ..» * Является ли этот фрейм максимально развернутым? BTW - Где это искусство/рисунки ASCII, как указано в моем комментарии? –

ответ

3

JPanel с GridLayout проблемы - это, вероятно, добавлен в BorderLayout.CENTER контейнере и, следовательно, она тянется через все доступное пространство. Он также имеет равные размеры ячеек. Либо оберните сетку в BorderLayout и добавьте ее в BorderLayout.NORTH, либо воспользуйтесь GridBagLayout для панелей.


enter image description here

Вот пример, демонстрирующий, как панели раскладывают в вашем примере и как выкладываются в других раскладок. Я думаю, что это даст понять, почему ваш GridLayout ведет себя таким образом.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.GridLayout; 
import java.awt.Insets; 

import javax.swing.BorderFactory; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Example { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Example(); 
      } 
     }); 
    } 

    public Example() { 

     // GridLayout 

     JPanel container1 = new JPanel(new GridLayout(2, 1)); 
     container1.add(createExamplePanel()); 
     container1.add(createExamplePanel()); 

     // GridLayout inside BorderLayut (NORTH) 

     JPanel panel = new JPanel(new GridLayout(2, 1, 0, 5 /* margin */)); // You could also use other layouts here, e.g. a BoxLayout 
     panel.add(createExamplePanel()); 
     panel.add(createExamplePanel()); 
     JPanel container2 = new JPanel(new BorderLayout()); 
     container2.add(panel, BorderLayout.NORTH); 

     // GridBagLayout 

     JPanel container3 = new JPanel(new GridBagLayout()); 
     GridBagConstraints constraints = new GridBagConstraints(); 
     constraints.anchor = GridBagConstraints.PAGE_START; 
     constraints.fill = GridBagConstraints.HORIZONTAL; 
     constraints.insets = new Insets(0, 0, 5 /* margin */, 0); 
     constraints.weightx = 1.0; 
     container3.add(createExamplePanel(), constraints); 
     constraints.gridy = 1; 
     constraints.weighty = 1.0; 
     constraints.insets = new Insets(0, 0, 0, 0); 
     container3.add(createExamplePanel(), constraints); 

     JPanel contentPane = new JPanel(new GridLayout(1, 3, 5, 5)); 
     contentPane.add(createTitledPanel(container1, "GridLayout")); 
     contentPane.add(createTitledPanel(container2, "GridLayout inside BorderLayout (NORTH)")); 
     contentPane.add(createTitledPanel(container3, "GridBagLayout")); 

     JFrame frame = new JFrame("Example"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(contentPane); 
     frame.setSize(800, 600); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    private JPanel createTitledPanel(JComponent content, String title) { 
     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(content); 
     panel.setBorder(BorderFactory.createTitledBorder(title)); 
     return panel; 
    } 

    private JPanel createExamplePanel() { 
     JPanel panel = new JPanel(); 
     panel.add(new JLabel("Panel")); 
     panel.setBorder(BorderFactory.createLineBorder(Color.GRAY)); 
     return panel; 
    } 

} 
+0

Спасибо за подробный ответ! Один вопрос, если у меня еще две панели под первоначальными двумя, должен ли я установить макет на юг для нижней панели? –

+0

Итак, я сделал то, что вы сказали, и теперь текстовые поля находятся под первыми текстовыми полями, но нижняя часть их обрезана. Вот что я сделал: topPanel.add (searchPanel); JPanel container2 = новый JPanel (новый BorderLayout()); container2.add (topPanel, BorderLayout.NORTH); Затем я добавил контейнер в рамку. Im, использующий gridlayout (0,1), должен ли это измениться? –

+1

@ B.minnick Пожалуйста, отредактируйте ваш вопрос и включите runnable [mcve]. Я, к сожалению, не могу воспроизвести проблему, которую вы описываете. –

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