赞
踩
一个界面只可以有一个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); //设置可以显示 } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。