JPanel面板
一、关键代码
(一)、新建面板
JPanel p_1=new JPanel();// 创建面板p_1
- 上行代码需要在源码前段添加变量代码:
import javax.swing.JPanel;// 面板
(二)、面板添加边框
p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
- 上行代码说明:给面板p_1添加边框,标题名称“面板p_1”
- 英语单词: Border(边框),Factory(工厂),create(创造),Titled(标题)
(三)、面板选择的布局方法
-
边界布局,面板里建立边界布局,需要添加变量:import java.awt.BorderLayout
p_1.setLayout(new BorderLayout());// 面板p_1建立布局,边界布局
-
网格布局,面板李建立网格布局,需要添加变量:import java.awt.GridLayout
p_2.setLayout(new GridLayout(5,1,20,5));// p_1建立布局,网格布局;行,列,水平间距,竖直间距
-
流布局,面板建立流布局,需要在源码前面添加变量:import java.awt.FlowLayout;
p_3.setLayout(new FlowLayout());// p_3建立布局,流布局
二、简单说明
源码的大致思想。先创建一个窗体f,设置好各种属性,如大小、坐标、是否可见、关闭方式等。然后创建一个容器c,容器c用于布置各种“按钮”等组件,以及排布方式。有时候窗体内布置组件需要分开处理布置,此时便可考虑使用面板了。使用面板先划分各面板处在窗体中的各位置。最后,面板里可以添加“按钮”等各种组件,选择不同的布局方法,不同的背景颜色等。各面板之间可以分别布置组件,互不打扰之模式。
- 注意: 本博文网格布局的行和列运行效果需要注意的。“按钮”数÷行数=n,那么n+1变为列数,列数受手动设置数值的效果不大。具体可以看往期的网格布局的博文。
三、流程图
可以直接在容器c中添加“按钮”等各种构件,也可以在容器c添加面板p后,再在面板p里添加“按钮”等各种构件。添加面板p可以将窗体f分成多个区域,然后对各个区域分别进行构件、排布、尺寸等各属性的设计。
四、源码
(一)、源码A
- 说明: 窗体f里添加容器c,容器c里添加4个面板,容器c使用网格布局来布置面板,分别设置不同的背景颜色。方法way1为窗体的主要属性。方法way2为添加各面板的各种属性。
/*
JPanel面板
步骤:
1、窗体
2、窗体里添加容器
3、容器添加面板
4、构件可以添加到“容器”中,也可以添加到“面板”里,
显示效果不同。
提醒:关于网格布局(GridLayout),行和列的关系说明
可以看往期的“网格布局”的博文
*/
import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局
import java.awt.Color;// 颜色
import java.awt.BorderLayout;// 边界布局
import java.awt.FlowLayout;// 流布局
import javax.swing.JFrame;// 窗体
import javax.swing.JPanel;// 面板
import javax.swing.BorderFactory;// 边框 工厂
import javax.swing.JButton;// 按钮
class Demo{
JFrame f=new JFrame();// 新建窗体f
Container c;// 新建“容器”c
/*
方法way2
设置插入容器中面板的数量、属性
*/
void way2(){
c=f.getContentPane();// 容器镶入窗体f中
// 网格组布局(行数,列数,水平间距,垂直间距)
c.setLayout(new GridLayout(2,2,20,30));// 容器c建立布局,网格布局
/*
面板p_1的属性
*/
JPanel p_1=new JPanel();// 创建面板p_1
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
p_1.setBackground(Color.pink);// 设置背景颜色
c.add(p_1);// 面板p_1放于容器c中
/*
面板p_2的属性
*/
JPanel p_2=new JPanel();// 创建面板
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_2.setBorder(BorderFactory.createTitledBorder("面板p_2"));// 面板p_2添加边框
p_2.setBackground(Color.GREEN);// 背景颜色
c.add(p_2);// 面板p_2放于容器中
/*
面板p_3的属性
*/
JPanel p_3=new JPanel();// 创建面板
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_3.setBorder(BorderFactory.createTitledBorder("面板p_3"));// 面板p_3添加边框
p_3.setBackground(Color.YELLOW);// 背景颜色
c.add(p_3);// 面板p_3放于容器中
/*
面板p_4的属性
*/
JPanel p_4=new JPanel();// 创建面板
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_4.setBorder(BorderFactory.createTitledBorder("面板p_4"));// 面板p_4添加边框
p_4.setBackground(Color.BLUE);// 背景颜色
c.add(p_4);// 面板p_4放于容器中
}
/*
方法way1
设置窗体的属性
*/
void way1(){
f.setSize(900,780);// 窗体f的尺寸
// Location(位置),Relative(相对的),null则为居中(默认)
f.setLocationRelativeTo(null);// 居中显示,null(空值)
// Default(默认),Operration(操作),点×程序停止运行
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Demo d=new Demo();// 创建一个Demo类d,class后面的自命名
d.way1();// 窗体属性
d.way2();// 容器镶入窗体,设置面板属性
d.f.setVisible(true);// 窗体可见
}
}
(二)、源码A的运行效果
(三)、源码B
- 说明: 在四个面板里添加“按钮”。分别使用边界布局、网格布局、流布局、绝对布局。具体的布局方法说明可以看往期的相关博文。
/*
JPanel面板
步骤:
1、窗体
2、窗体里添加容器
3、容器添加面板
4、构件可以添加到“容器”中,也可以添加到“面板”里,
显示效果不同。
提醒:关于网格布局(GridLayout),行和列的关系说明
可以看往期的“网格布局”的博文
*/
import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局
import java.awt.Color;// 颜色
import java.awt.BorderLayout;// 边界布局
import java.awt.FlowLayout;// 流布局
import javax.swing.JFrame;// 窗体
import javax.swing.JPanel;// 面板
import javax.swing.BorderFactory;// 边框 工厂
import javax.swing.JButton;// 按钮
class Demo{
JFrame f=new JFrame();// 新建窗体f
Container c;// 新建“容器”c
/*
方法way2
设置插入容器中面板的数量、属性
*/
void way2(){
c=f.getContentPane();// 容器镶入窗体f中
// 网格组布局(行数,列数,水平间距,垂直间距)
c.setLayout(new GridLayout(2,2,20,30));// 容器c建立布局,网格布局
/*
面板p_1的属性
*/
JPanel p_1=new JPanel();// 创建面板p_1
p_1.setLayout(new BorderLayout());// 面板p_1建立布局,边界布局
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
p_1.setBackground(Color.pink);// 设置背景颜色
p_1.add(new JButton("按钮-西"),BorderLayout.WEST);// 边界布局,西
p_1.add(new JButton("按钮-东"),BorderLayout.EAST);// 边界布局,东,p_1
p_1.add(new JButton("按钮-北"),BorderLayout.NORTH);// 边界布局,北
p_1.add(new JButton("按钮-南"),BorderLayout.SOUTH);// 边界布局,南
p_1.add(new JButton("按钮-中"),BorderLayout.CENTER);// 边界布局,中
c.add(p_1);// 面板p_1放于容器c中
/*
面板p_2的属性
*/
JPanel p_2=new JPanel();// 创建面板
p_2.setLayout(new GridLayout(5,1,20,5));// p_1建立布局,网格布局;行,列,水平间距,竖直间距
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_2.setBorder(BorderFactory.createTitledBorder("面板p_2"));// 面板p_2添加边框
p_2.setBackground(Color.GREEN);// 背景颜色
/*
p_2里添加按钮
*/
for(int i=0;i<9;i++){
p_2.add(new JButton("按钮"+i));
}
c.add(p_2);// 面板p_2放于容器中
/*
面板p_3的属性
*/
JPanel p_3=new JPanel();// 创建面板
p_3.setLayout(new FlowLayout());// p_3建立布局,流布局,需要在前面添加import java.awt.FlowLayout;
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_3.setBorder(BorderFactory.createTitledBorder("面板p_3"));// 面板p_3添加边框
p_3.setBackground(Color.YELLOW);// 背景颜色
/*
p_3里添加按钮
*/
for(int i_2=0;i_2<9;i_2++){
p_3.add(new JButton("按钮"+i_2));
}
c.add(p_3);// 面板p_3放于容器中
/*
面板p_4的属性
*/
JPanel p_4=new JPanel();// 创建面板
// Border(边框),Factory(工厂),create(创造),Titled(标题)
p_4.setBorder(BorderFactory.createTitledBorder("面板p_4"));// 面板p_4添加边框
p_4.setBackground(Color.BLUE);// 背景颜色
p_4.setLayout(null);// 绝对布局
JButton b_4=new JButton("按钮p_4");// 创建按钮
b_4.setBounds(20,40,300,200);// 坐标,尺寸
p_4.add(b_4);
c.add(p_4);// 面板p_4放于容器中
}
/*
方法way1
设置窗体的属性
*/
void way1(){
f.setSize(900,780);// 窗体f的尺寸
// Location(位置),Relative(相对的),null则为居中(默认)
f.setLocationRelativeTo(null);// 居中显示,null(空值)
// Default(默认),Operration(操作),点×程序停止运行
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Demo d=new Demo();// 创建一个Demo类d,class后面的自命名
d.way1();// 窗体属性
d.way2();// 容器镶入窗体,设置面板属性
d.f.setVisible(true);// 窗体可见
}
}
(四)、源码B的运行效果
五、定位日期
2022.3.23;19:31