Layout manager preferredSize Java
I'm still trying to learn how layout manager works I made a frame with two jpanels
I set the preferredSize of each panel accordingly and packaged them, but I got unexpected results
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 @R_985_2419@Layout(controlPane,@R_985_2419@Layout.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();
}
}
No matter what I do, if I use grid layout, it always seems to allocate half of the available space for each control I was told:
The height of the button panel is 20 Its distribution far exceeds it:
What's wrong with this code? I'd like to keep two jpanels, please It's easy to simply add text boxes and buttons directly to the frame, but I need to use jpanels (because I'm going to add borders and other things)
Solution
This is the result of using GridLayout as the layout manager Change it to borderlayout:
frame.getContentPane().setLayout(new BorderLayout());
For example, this code (I changed a little from the original):
import java.awt.*;
import javax.swing.*;
public class LayoutMgrTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setDefaultCloSEOperation( JFrame.EXIT_ON_CLOSE );
//frame.setVisible(true);
//frame.getContentPane().setLayout(new BorderLayout());
JPanel controlPane = new JPanel();
JPanel buttonPane = new JPanel();
controlPane.setLayout(new @R_985_2419@Layout(controlPane,40));
buttonPane.add(new JButton("Button1"));
buttonPane.add(new JButton("Button2"));
frame.add(controlPane,BorderLayout.NORTH);
frame.add(buttonPane,BorderLayout.soUTH);
//frame.setSize(new Dimension(500,500));
frame.pack();
frame.setVisible(true);
}
}
Generate this framework:
