固定JFrame下,默认BorderLayout布局中的JPanel大小如何调整?
JFrame默认布局为BorderLayout,共五个部分,分别为:NORTH、SOUTH、LEFT、RIGHT、CENTER,BorderLayout常量,需要为添加的组件进行单独指定。
在JFrame固定大小情况下,如果布局中使用JPanel,那JPanel如何设置大小,与JFrame大小是之间关系,本文进行实际实践总结。
代码如下:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FixFrameTest {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyFrame extends JFrame{
public MyFrame(){
init();
}
public void init() {
setSize(800,600);//固定窗口大小
setBackground(Color.BLACK);
LeftPan left=new LeftPan();
add(left,BorderLayout.WEST);
CenterPan center=new CenterPan();
add(center,BorderLayout.CENTER);
RightPan right=new RightPan();
add(right,BorderLayout.EAST);
TopPan top=new TopPan();
top.add(new JButton("Welcomd"));
add(top,BorderLayout.NORTH);
BottomPan bottom=new BottomPan();
bottom.add(new JButton("here"));
add(bottom,BorderLayout.SOUTH);
}
}
class LeftPan extends JPanel{
public LeftPan() {
setPreferredSize(new Dimension(50, 0));//高度无效
setBackground(Color.RED);
}
}
class CenterPan extends JPanel{
public CenterPan() {
setPreferredSize(new Dimension(100, 100));//宽度、高度无效
setBackground(Color.GREEN);
}
}
class RightPan extends JPanel{
public RightPan() {
setPreferredSize(new Dimension(150, 0));//高度无效
setBackground(Color.BLACK);
}
}
class TopPan extends JPanel{
public TopPan() {
setPreferredSize(new Dimension(0, 30));//宽度无效
setBackground(Color.ORANGE);
}
}
class BottomPan extends JPanel{
public BottomPan() {
setPreferredSize(new Dimension(0, 50));//宽度效果
setBackground(Color.BLUE);
}
}
执行结果:
总结:
1、JFrame默认布局:BorderLayout(JPanel默认布局为FlowLayout),JFrame默认布局会屏蔽设置大小JPanel.setSize设置的大小,如要更改,可以使用JPanel.setPreferredSize更改大小。
2、BorderLayout的LEFT、RIGHT的宽度,由组件决定,高度=JFrame.getHeight()-NORTH、SOUTH的高度;NORTH、SOUTH的高度,,由组件决定,宽度=JFrame.getWidth()-LEFT、RIGHT的宽度;CENTER宽度、高度均倒算。
3、可以通过JFrame.setLayout(null)可是去掉布局管理器,自行布局。