Java---面板组件(Jpanel)1
存在的原因:
如果是普通的组件布局,用之前讲到的三种布局管理器就可以解决,但是在比较复杂的要求时就需要用到布局管理器的组合使用。比如下图:
JPanel:面板组件,非顶层容器。
一个界面只能有一个JFrame 窗体组件,但是可以有多个JPpanel面板组件,而且在JPanel上也是可以用FlowLayOut,BorderLayOut,GirdLayOut等各种布局管理器,这样组合使用,可以达到较为复杂的布局效果。
整体的构造:JPanel相当于将整个窗体划分成几个面板,然后在面板中使用布局管理器(管理按钮的布局),如上图,窗体被划分成2个面板,中间的那个是按钮,然后在面板中使用BorderLayOut管理器,然后在面板中加入按钮。
案例:如上图
/*
* 面板组件:多种布局管理器的组合
* 6个按钮,2个JPanel
*/
package com.panhui;
import java.awt.*;
import javax.swing.*;
public classDemo10_17 extends JFrame{
//定义组件
JPaneljp1,jp2;
JButtonjb1,jb2,jb3,jb4,jb5,jb6;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo10_17 demo = newDemo10_17();
}
//构造函数
public Demo10_17()
{
//创建按组件
//JPanel布局默认的是FlowLayOut
jp1 = new JPanel();
jp2 = new JPanel();
jb1 = new JButton("西瓜");
jb2 = new JButton("香蕉");
jb3 = new JButton("菠萝");
jb4 = new JButton("苹果");
jb5 = new JButton("葡萄");
jb6 = new JButton("柚子");
//设置布局
//将按钮添加到JPanel
jp1.add(jb1);
jp1.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);
//将Panel加入JFrame
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.SOUTH);
this.add(jb6,BorderLayout.CENTER);
//窗体的设置
this.setTitle("面板组件");
this.setSize(399, 399);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200,200);
//显示
this.setVisible(true);
}
}
注意事项:
1, JPanel 是JComponent的子类
2, 属于容器类组件,可以加入别的组件
3, 默认布局管理器,流式布局(FlowLayOut)
几个常用的组件
1, 文本框(JTextFiled)
2, 密码框(JPasswordField)
3, 标签(JLable)
代码:
package com.panhui;
import java.awt.*;
import javax.swing.*;
public classDemo10_17_1 extends JFrame{
//定义组件
//三个JPanel,三个标签,两个按钮,一个文本框组件,一个密码框组件
JPaneljp1,jp2,jp3;
JLabeljlb1,jlb2;
JButtonjb1,jb2;
JTextFieldjtf1;
JPasswordFieldjpf1;
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo10_17_1 demo10_17_1 = newDemo10_17_1();
}
//构造函数
public Demo10_17_1()
{
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = newJPanel();
jlb1 = new JLabel("管理员");
jlb2 = new JLabel("密 码");
jb1 = new JButton("登陆");
jb2 = new JButton("取消");
//宽度为10
jtf1 = new JTextField(10);
jpf1 = new JPasswordField(10);
//设置布局管理器
this.setLayout(new GridLayout(3,1));
//加入各个组件
jp1.add(jlb1);
jp1.add(jtf1);
jp2.add(jlb2);
jp2.add(jpf1);
jp3.add(jb1);
jp3.add(jb2);
//设置窗口
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.setSize(300, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示
this.setVisible(true);
}
}
结果: