一、面板组件
一个界面只可以有一个JFrame顶层容器,但是可以有多个JPanel面板组件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,
这样可以组合使用达到较为复杂的布局效果。
面板组件可以设置布局模式,实现多模式布局,但默认为流式布局。
面板组件里可以添加其他组件
代码如下(示例):
package 面板组件;/*JPanel:面板组件,非顶层容器,默认为流式布局。
一个界面只可以有一个JFrame顶层容器,但是可以有多个JPanel面板组件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,
这样可以组合使用达到较为复杂的布局效果。
面板组件可以设置布局模式,实现多模式布局,但默认为流式布局。
面板组件里可以添加其他组件。*/
import java.awt.*; //导包
import javax.swing.*;
public class Swing_JPanel1 extends JFrame { //继承JFrame顶层容器
//定义组件
JPanel jp1, jp2; //定义面板
JButton jb[] = new JButton[6]; //定义按钮
public static void main(String[] args) {
Swing_JPanel1 a = new Swing_JPanel1(); //实现界面
}
//构造函数
public Swing_JPanel1() {
//创建组件
jp1 = new JPanel(); //创建面板
jp2 = new JPanel();
jb[0] = new JButton("苹果"); //创建按钮
jb[1] = new JButton("荔枝");
jb[2] = new JButton("葡萄");
jb[3] = new JButton("香蕉");
jb[4] = new JButton("草莓");
jb[5] = new JButton("西瓜");
//设置布局管理器(因为默认让它就是边界布局,所以不用设置)
//添加组件,我喜欢整体到局部,也可以局部到整体
this.add(jp1, BorderLayout.NORTH); //把面板1添加到北部
this.add(jb[5], BorderLayout.CENTER); //把按钮6添加到中部
this.add(jp2, BorderLayout.SOUTH); //把面板2添加到南部
jp1.add(jb[0]); //添加面板1的按钮组件
jp1.add(jb[1]);
jp2.add(jb[2]); //添加面板2的按钮组件
jp2.add(jb[3]);
jp2.add(jb[4]);
//设置窗体属性
this.setTitle("组合布局案例"); //设置窗体标题
this.setSize(300, 200); //设置窗体大小
this.setLocation(200, 200); //设置窗体初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
this.setVisible(true); //设置可以显示
}
}
二、文本框密码框标签组件
文本框(JTextField):用于输出文本,是明文。(用户名后面的输入框)
密码框(JPasswordField):用于输入密码,输入的不是明文,而是一串符号。(密码后的输入框)
标 签(JLabel):用于显示一串字符。(文本框和密码框前的字就是标签)
代码如下(示例):
package 文本框密码框标签组件;
import javax.swing.*; //导包
import java.awt.*;
public class Swing_JTextField extends JFrame { //继承JFrame顶层容器类
//定义组件
JPanel jp1, jp2, jp3; //定义面板
JTextField jtf1; //定义文本框
JPasswordField jpf1; //定义密码框
JLabel jlb1, jlb2; //定义标签
JButton jb1, jb2; //定义按钮
public static void main(String[] args) { //主函数
Swing_JTextField a = new Swing_JTextField(); //显示界面
}
public Swing_JTextField() //构造函数
{
//创建组件
jp1 = new JPanel(); //创建三个面板
jp2 = new JPanel();
jp3 = new JPanel();
jlb1 = new JLabel("用户名"); //创建两个标签
jlb2 = new JLabel("密 码");
jb1 = new JButton("登录"); //创建两个按钮
jb2 = new JButton("取消");
jtf1 = new JTextField(10); //创建文本框
jpf1 = new JPasswordField(10); //创建密码框
//设置布局管理器
this.setLayout(new GridLayout(3, 1)); //网格布局,3行一列
//添加组件
this.add(jp1); //添加面板
this.add(jp2);
this.add(jp3);
jp1.add(jlb1); //添加面板1的标签和文本框
jp1.add(jtf1);
jp2.add(jlb2); //添加面板2的标签和密码框
jp2.add(jpf1);
jp3.add(jb1); //添加面板3的按钮
jp3.add(jb2);
//设置窗口属性
this.setTitle("登录界面"); //创建界面标题
this.setSize(300, 200); //设置界面像素
this.setLocation(500, 100); //设置界面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置界面和虚拟机一起关闭
this.setVisible(true); //设置界面可显示
}
}
三、单选框和复选框
*当我们提供用户注册界面的时候,常常会用到:
复选框组件(JCheckBox)
单选框组件(JRadioButton)
介绍两个组件:
复选框组件(JCheckBox):可以多选的选择框
单选框组件(JRadioButton):只能单选的选择框*/
代码如下(示例):
package 单选框和复选框;
import java.awt.*; //导包
import javax.swing.*;
public class Swing_JCheckBox extends JFrame { //继承JFrame顶级容器类
//定义组件
JPanel jp1,jp2,jp3; //定义面板组件
JLabel jlb1,jlb2; //定义标签组件
JButton jb1,jb2; //定义按钮组件
JCheckBox jcb1,jcb2,jcb3; //定义多选框组件
JRadioButton jrb1,jrb2; //定义单选框组件
ButtonGroup bg; //定义按钮组(注意这个不是组件,它是个作用域,我只是把它定义在这里而已)
public static void main(String[] args) {
Swing_JCheckBox a=new Swing_JCheckBox(); //显示界面
}
public Swing_JCheckBox()
{
//创建组件
jp1=new JPanel(); //创建面板
jp2=new JPanel();
jp3=new JPanel();
jb1=new JButton("注册用户"); //创建按钮
jb2=new JButton("取消注册");
jlb1=new JLabel("你最喜欢的运动"); //创建标签
jlb2=new JLabel("你的性别");
jcb1=new JCheckBox("足球"); //创建复选框
jcb2=new JCheckBox("蓝球");
jcb3=new JCheckBox("网球");
jrb1=new JRadioButton("男"); //创建单选框
jrb2=new JRadioButton("女");
bg=new ButtonGroup(); //创建按钮组
//设置布局管理器
this.setLayout(new GridLayout(3,1)); //三行一列网格布局
//添加组件
this.add(jp1); //添加三个面板
this.add(jp2);
this.add(jp3);
jp1.add(jlb1);//jlb1=new JLabel("你最喜欢的运动"); //添加面板1的组件
jp1.add(jcb1);//jcb1=new JCheckBox("足球"); //创建复选框
jp1.add(jcb2);// jcb2=new JCheckBox("蓝球");
jp1.add(jcb3); //jcb3=new JCheckBox("网球");
jp2.add(jlb2); //添加面板2的组件
bg.add(jrb1); //必须要把单选框放入按钮组作用域中才能实现单选!!!!
bg.add(jrb2);//你的性别
jp2.add(jrb1);//男
jp2.add(jrb2);//女
jp3.add(jb1); //添加面板3的组件
jp3.add(jb2);
//设置窗体属性
this.setTitle("用户注册界面"); //设置界面标题
this.setSize(350, 150); //设置界面像素
this.setLocation(200, 200); //设置界面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置虚拟机和界面一同关闭
this.setVisible(true); //设置界面可视化
}
}
四、下拉框列表框滚动窗格组件
在提供用户调查几面的时候,如果选项比较多,那么就会用到:
下拉框组件(JComboBox)
列表框组件(JList)
滚动窗格组件(JScrollPane)
介绍三个组件:
下拉框组件(JComboBox):点击箭头可以显示其他信息
列表框组件(JList):可以跟列表一样显示信息
滚动窗格组件(JScrollPane):与列表框结合使用,可以滚动显示
代码如下(示例):
package 下拉框列表框滚动窗格组件;
import java.awt.*; //导包
import javax.swing.*;
public class Swing_JComboBox extends JFrame{ //继承JFrame顶层容器类
//定义组件
JPanel jp1,jp2; //定义面板
JLabel jlb1,jlb2; //定义标签
JComboBox jcb1; //定义下拉框
JList jl1; //定义列表框
JScrollPane jsp1; //定义滚动窗条
public static void main(String[] args) { //主函数
Swing_JComboBox a=new Swing_JComboBox();
}
public Swing_JComboBox() //构造函数
{
//创建组件
jp1=new JPanel(); //创建面板
jp2=new JPanel();
jlb1=new JLabel("你的籍贯"); //创建标签
jlb2=new JLabel("旅游景点");
String []ct= {"北京","上海","苏州","徐州","常州"}; //创建城市
jcb1=new JComboBox(ct); //把城市添加到下拉框中
String []dd= {"东方明珠","苏州园林","云龙山","故宫","嬉戏谷","杭州乐园"}; //创建经典
jl1=new JList(dd); //把经典添加到列表框中
jl1.setVisibleRowCount(4); //列表框只显示4个信息(必须要有滚动窗格连用才生效)
jsp1=new JScrollPane(jl1); //给列表框加一个滚动窗格//定义滚动窗条
//设置布局管理器
this.setLayout(new GridLayout(2,1)); //设置网格布局,2行1列
//加入组件
this.add(jp1); //添加两个面板
this.add(jp2);
jp1.add(jlb1); //添加面板1的组件
jp1.add(jcb1);
jp2.add(jlb2); //添加面板2的组件
jp2.add(jsp1); //注意!!这里不添加列表框,直接添加滚动窗格!!
//设置窗体属性
this.setTitle("用户注册界面"); //设置界面标题
this.setSize(300, 250); //设置界面像素
this.setLocation(200, 200); //设置界面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置虚拟机和界面一同关闭
this.setVisible(true); //设置界面可视化
}
}
五、多行文本框组件
文本框JTextField是单行输入,而多行文本框(JTextArea)可以实现多行输入。
*看到上部占了大部分空间,决定使用边界布局。
下部的最下部很像边界布局的SOUTH部分,在这部分中有两种组件,一种按钮组件JButton,一种下拉列表JComboBox,并且采用流式布局的右对齐。
上部采用拆分窗格将两个多行文本框放在窗格两侧
代码如下(示例):
import java.awt.*; //导包
import javax.swing.*;
public class Swing_exercise2 extends JFrame { //继承JFrame顶层框架
//定义组件
//上部组件
JPanel jp1; //定义面板
JSplitPane jsp; //定义拆分窗格
JTextArea jta1; //定义文本域
JScrollPane jspane1; //定义滚动窗格
JTextArea jta2;//定义文本域
JScrollPane jspane2;//定义滚动窗格
//下部组件
JPanel jp2;//定义面板
JButton jb1,jb2; //定义按钮
JComboBox jcb1; //定义下拉框
public static void main(String[] args) {
Swing_exercise2 a=new Swing_exercise2(); //显示界面
}
public Swing_exercise2() //构造函数
{
//创建组件
//上部组件
jp1=new JPanel(); //创建面板
jta1=new JTextArea(); //创建多行文本框
jta1.setLineWrap(true); //设置多行文本框自动换行
jspane1=new JScrollPane(jta1); //创建滚动窗格
jta2=new JTextArea();//创建多行文本框
jta2.setLineWrap(true);//设置多行文本框自动换行
jspane2=new JScrollPane(jta2);//创建滚动窗格
jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jspane1,jspane2); //创建拆分窗格
jsp.setDividerLocation(200); //设置拆分窗格分频器初始位置
jsp.setDividerSize(1); //设置分频器大小
//下部组件
jp2=new JPanel();
jb1=new JButton("返回"); //创建按钮
jb2=new JButton("发送");
String [] name= {"周卫国","白子画","陆雪琪","金正恩","本·拉登"};
jcb1=new JComboBox(name); //创建下拉框
//设置布局管理
jp1.setLayout(new BorderLayout()); //设置面板布局
jp2.setLayout(new FlowLayout(FlowLayout.RIGHT));
//添加组件
jp1.add(jsp);
jp2.add(jcb1);
jp2.add(jb1);
jp2.add(jb2);
this.add(jp1,BorderLayout.CENTER);
this.add(jp2,BorderLayout.SOUTH);
//设置窗体实行
this.setTitle("聊天界面"); //设置界面标题
this.setIconImage(new ImageIcon("image/qq.gif").getImage()); //设置标题图片,就是上面的小企鹅
this.setSize(400, 350); //设置界面像素
this.setLocation(200, 200); //设置界面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置虚拟机和界面一同关闭
this.setVisible(true); //设置界面可视化
}
}
六、菜单栏组件
JMenuBar name=new JMenuBar(); //创建菜单栏
JMenu name=new JMenu(""); //创建菜单
JMenuItem name=new JMenuItem(""); //创建子菜单
代码如下(示例):
import java.awt.*;
import javax.swing.*;
public class Swing_JMenu extends JFrame {
//定义组件
JMenuBar jmb; //定义菜单栏
JMenu jm1, jm2, jm3, jm4, jm5; //定义菜单
JMenu jm6, jm7, jm8, jm9; //定义菜单中的菜单
JMenuItem jmi1, jmi2, jmi3, jmi4, jmi5; //定义子菜单
JMenuItem jmi6, jmi7, jmi8, jmi9, jmi10; //定义子菜单
public static void main(String[] args) {
Swing_JMenu a = new Swing_JMenu();
}
public Swing_JMenu() {
//创建组件
jmb = new JMenuBar(); //创建菜单栏
jm1 = new JMenu("文件"); //创建菜单
jm2 = new JMenu("编辑");
jm3 = new JMenu("资源");
jm4 = new JMenu("窗口");
jm5 = new JMenu("帮助");
jm6 = new JMenu("新建");
jm7 = new JMenu("打开");
jm8 = new JMenu("保存");
jm9 = new JMenu("导入");
jmi6 = new JMenu("测试");
jmi7 = new JMenu("加油1");
jmi8 = new JMenu("加232油");
jmi9 = new JMenu("加油2");
jmi10 = new JMenu("加油2");
jmi1 = new JMenuItem("文档"); //创建子菜单
jmi2 = new JMenuItem("工程");
jmi3 = new JMenuItem("包");
jmi4 = new JMenuItem("类");
jmi5 = new JMenuItem("接口");
//把子菜单添加到菜单中
jm2.add(jmi6);
jm2.add(jmi7);
jm2.add(jmi8);
jm2.add(jmi9);
jm2.add(jmi10);
//设置布局管理器
//添加组件
jm6.add(jmi1); //把子菜单添加到菜单中
jm6.add(jmi2);
jm6.add(jmi3);
jm6.add(jmi4);
jm6.add(jmi5);
jm1.add(jm6); //把菜单添加到菜单中
jm1.add(jm7);
jm1.add(jm8);
jm1.add(jm9);
jmb.add(jm1); //把菜单添加到菜单栏中
jmb.add(jm2);
jmb.add(jm3);
jmb.add(jm4);
jmb.add(jm5);
this.add(jmb, BorderLayout.NORTH); //把菜单栏添加到框架北部
//设置界面属性
this.setTitle("菜单栏案例"); //设置界面标题
this.setSize(300, 250); //设置界面像素
this.setLocation(200, 200); //设置界面初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置虚拟机和界面一同关闭
this.setVisible(true); //设置界面可视化
}
}
七、流式布局
按照组件的添加次序将按钮组件(当然也可以是别的组件)从左到右放置在容器中。
当到达容器的边界时,组件将放置在下一行中。FlowLayout可以以左对齐,居中对齐、以右对齐的方式排列组件。
代码如下(示例):
package GUI布局管理器;
import java.awt.*;
import javax.swing.*;
public class 流式布局FlowLayout extends JFrame{
//定义需要的组件
JButton jb1,jb2,jb3,jb4,jb5,jb6;
public static void main(String[] args) { //主函数
流式布局FlowLayout a=new 流式布局FlowLayout(); //实现界面
}
public 流式布局FlowLayout() //swing_3的构造函数
{
//创建组件
jb1=new JButton("关羽");
jb2=new JButton("张飞");
jb3=new JButton("赵云");
jb4=new JButton("马超");
jb5=new JButton("黄忠");
jb6=new JButton("魏延");
//添加组件
this.add(jb1); //流式布局是流动的,所以可以直接添加
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
this.add(jb6);
//设置布局管理器
this.setLayout(new FlowLayout()); //如果你不设置的话,JFrame默认的是BorderLayout边界布局管理器
//设置窗体
this.setTitle("流式布局案例"); //设置窗体标题
this.setSize(300, 200); //设置窗体大小
this.setLocation(200, 200); //设置窗体初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
this.setVisible(true); //设置可以显示
}
}
八、网格布局
代码如下(示例):
package GUI布局管理器;
import javax.swing.*; //导包
import java.awt.*;
//导包
public class 网格布局 extends JFrame{ //继承JFrame类
int size=9;
JButton jbs[]=new JButton[size]; //创建button数组
public static void main(String[] args) { //主函数
网格布局 a= new 网格布局(); //实现界面
}
public void 网格布局() //构造函数
{
//创建组件
for(int i=0;i<9;i++)
{
jbs[i]=new JButton(String.valueOf(i));
}
//设置网格布局
this.setLayout(new GridLayout(3,3)); //这里设置的是3行3列,默认是1个组件1列
//添加组件
for(int i=0;i<9;i++)
{
this.add(jbs[i]);
}
//设置窗体属性
this.setTitle("网格布局案例"); //设置窗体标题
this.setSize(300, 200); //设置窗体大小
this.setLocation(200, 200); //设置窗体初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
this.setVisible(true); //设置可以显示
}
}
九、边界布局
概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所以的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
种类:Java共提供了五种布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。
边界布局介绍:
边界布局将容器简单的划分为东南西北中五个区域,中间区域最大。
JFrame窗体,JDialog对话框组件默认布局方法。
代码如下(示例):
import javax.swing.*; //导入swing包
import java.awt.*; //导入awt包
public class 边界布局 extends JFrame { //在类中继承JFrame顶级容器类(容器就是用来添加组件的,可以理解为一整个界面就是一个容器)
//定义组件
JButton jb1, jb2, jb3, jb4, jb5;
public static void main(String[] args) { //主函数
边界布局 a = new 边界布局(); //创建界面
}
public 边界布局() //创建swing_2类的构造函数,在构造函数中用this调用JFrame的方法,因为继承了
{
//创建组件
jb1 = new JButton("中部");
jb2 = new JButton("北部");
jb3 = new JButton("东部");
jb4 = new JButton("南部");
jb5 = new JButton("西部");
//添加组件
this.add(jb1, BorderLayout.CENTER); //中 //注意!!!!必须标明添加位置才行,不然全部按中部添加!!
this.add(jb2, BorderLayout.NORTH);//北
this.add(jb3, BorderLayout.EAST);//东部
this.add(jb4, BorderLayout.SOUTH);//南部
this.add(jb5, BorderLayout.WEST);//西部
//设置窗体
this.setTitle("边界布局案例"); //设置窗体标题
this.setSize(300, 200); //设置窗体大小
this.setLocation(200, 200); //设置窗体初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的话,关闭窗体虚拟机不关闭,一直占用内存。
this.setVisible(true); //设置可以显示
}
}