Я все еще пытаюсь узнать, как работают менеджеры по расположению. Я сделал кадр с двумя JPanels.
Первый содержит текстовую область с boxLayout.
Второй содержит макет потока с кнопкой.
Я соответственно установил предпочитаемый размер каждой панели, упаковал их, но получил неожиданные результаты.
import java.awt.*;
import javax.swing.*;
public class LayoutMgrTest
{
public static void main(String[] args)
{
TableBasic frame = new TableBasic();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.setVisible(true);
frame.getContentPane().setLayout(new GridLayout(2,1));
JPanel controlPane = new JPanel();
JPanel buttonPane = new JPanel();
controlPane.setLayout(new BoxLayout(controlPane, BoxLayout.PAGE_AXIS));
controlPane.setPreferredSize(new Dimension(200, 200));
controlPane.add(new JScrollPane(new JTextArea()));
buttonPane.setLayout(new FlowLayout(FlowLayout.LEFT));
buttonPane.setPreferredSize(new Dimension(100,20));
buttonPane.add(new JButton("Button1"));
buttonPane.add(new JButton("Button2"));
frame.getContentPane().add(controlPane, BorderLayout.NORTH);
frame.getContentPane().add(buttonPane, BorderLayout.SOUTH);
frame.setSize(new Dimension(500,500));
frame.pack();
}
}
Что бы я ни делал, если я использую сетку, он, кажется, всегда выделяет половину доступного пространства для каждого элемента управления. Мне сказали, что:
Высота каждой строки зависит от высоты каждого компонента.
добавлено в каждую строку.
Высота панели кнопок - 20. Она выделяет гораздо больше, чем это:
Что не так с этим кодом?
Я хотел бы оставить эти два JPanels нетронутыми, пожалуйста. Легко просто добавить текстовое поле и кнопки непосредственно к фрейму, но мне нужно сделать это с помощью JPanels (потому что я буду добавлять границы и другие вещи).