JavaSE13—窗体程序开发(中)
1、 布局方式
1) 绝对布局
硬性指定组件在容器中的位置和大小。窗体,面板等容器都可以采用绝对布局的方式。
步骤:
使用Container.setLayout(null)方式取消布局管理器。
使用Component.setBounds()方法来设置每个组件的大小与位置
注意:绝对布局在不同的平台上可能会出现组件重叠的问题。
实例1:使用绝对布局,创建一个登录窗口
该布局管理器将组件布局排列在东,西,南,北,中5个区域,每个区域可以放置一个组件,也可以在指定区域中放置包含其他组件的容器。
定义边界布局管理器
BorderLayout实现的是边界布局管理器。通过容器的setLayout()方法设置布局管理器,setLayout方法有一个参数,就是布局管理器实例对象,因此使用此边界布局管理器必须先创建它的实例对象。
BorderLayout() 该构造方法用于创建默认的边界布局管理器,这个布局管理器在各个区域的水平和垂直方向没有设置组件间距。
BorderLayout(hgap,vgap) 接收两个整数类型,用以设置管理器的水平和垂直方向的间距。
应用边界布局
应用边界布局管理器,首先必须调用容器的setLayout()方法设置该容器使用边界布局管理器,然后调用容器Container类的add()方法添加组件时可以设置此组件的布局区域。
实例:使用边界布局,实现在窗体中添加东西南北四个按钮。
3) 网格布局
网格布局管理器可以将组件以网格的形式排列起来,使用网格布局,容器被分成大小相等的矩形,每个矩形区域中可以放置一个组件,就像表格中的单元格一样整齐的排列。
创建网格布局管理器
GridLayout类表示网格布局管理器,容器通过setLayout()方法,将GridLayout作为对象,可将容器设置为网络布局的形式。
实例:使用网络布局,将窗体容器使用3*3的网络布局管理器,并在窗体中添加按钮
流式布局是最基本得布局管理器,使用流式布局的容器按指定方向摆放组件。
实例:创建窗体,采用流式布局的形式排放控件,采用居中对齐的方式。
1) 标签控件
标签控件用于显示文本或提示信息,支持文本字符串和图标。
JLabel的构造方法:
JLabel() 创建一个既无内容又无图像的标签
JLabel(String text) 创建一个有文本内容的标签
JLabel(String textr, int horizontalAlignment) 创建一个具有文本内容且水平显示的标签
JLabel(Icon icon)创建一个具有图像内容的标签
。。。
2) 普通按钮控件
在Swing中JButton表示按钮控件。常用构造方法:
JButton(String text) 创建一个带有文本标识的按钮
JButton(Icon icon) 创建一个带有图像标识的按钮
JButton(String text,Icon icon) 创建一个既有文本又有图像的按钮
实例:创建窗体,实现在窗体中添加“查看”与“帮助”两个按钮,在按钮上还添加图片
JRadioButton组件实现了一个单选按钮。JRadioButton可以单独使用,也可以与ButtonGroup类联合使用。
实例:创建框体,在窗体中创建3个单选按钮,并将这3个按钮添加到同一个按钮组中,设置第一个单选按钮初试为选中状态。
4) 复选框控件
JCheckBox类实现了一个复选框。
实例:创建窗体,在窗体中定义复选框组件,用户可以选择多个。
1、 布局方式
1) 绝对布局
硬性指定组件在容器中的位置和大小。窗体,面板等容器都可以采用绝对布局的方式。
步骤:
使用Container.setLayout(null)方式取消布局管理器。
使用Component.setBounds()方法来设置每个组件的大小与位置
注意:绝对布局在不同的平台上可能会出现组件重叠的问题。
实例1:使用绝对布局,创建一个登录窗口
package qijia.si; import java.awt.EventQueue; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class EntryFrame extends JFrame { private JTextField passWordTextField; private JTextField nameTextField; public static void main(String[] args){ EventQueue.invokeLater(new Runnable(){ public void run(){ try{ EntryFrame frame = new EntryFrame(); frame.setVisible(true); }catch(Exception e){ e.printStackTrace(); } } }); } public EntryFrame(){ super(); getContentPane().setLayout(null); //设置为绝对布局 setBounds(100,100,321,188); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(); panel.setLayout(null); panel.setBounds(0,0,316,154); getContentPane().add(panel); final JLabel name = new JLabel(); name.setFont(new Font("微软雅黑",Font.PLAIN,12)); name.setText("用户名:"); name.setBounds(62,27,52,26); panel.add(name); nameTextField = new JTextField(); nameTextField.setBounds(120,30,129,22); panel.add(nameTextField); final JLabel passWord = new JLabel(); passWord.setFont(new Font("微软雅黑",Font.PLAIN,12)); passWord.setText("密码:"); passWord.setBounds(65,55,44,18); panel.add(passWord); passWordTextField = new JTextField(); passWordTextField.setBounds(120,58,129,22); panel.add(passWordTextField); final JButton entry = new JButton(); entry.setText("登录"); entry.setBounds(84,104,64,28); panel.add(entry); final JButton cancel = new JButton(); cancel.setText("取消"); cancel.setBounds(170,104,64,28); panel.add(cancel); } }2) 窗口默认的边界布局
该布局管理器将组件布局排列在东,西,南,北,中5个区域,每个区域可以放置一个组件,也可以在指定区域中放置包含其他组件的容器。
定义边界布局管理器
BorderLayout实现的是边界布局管理器。通过容器的setLayout()方法设置布局管理器,setLayout方法有一个参数,就是布局管理器实例对象,因此使用此边界布局管理器必须先创建它的实例对象。
BorderLayout() 该构造方法用于创建默认的边界布局管理器,这个布局管理器在各个区域的水平和垂直方向没有设置组件间距。
BorderLayout(hgap,vgap) 接收两个整数类型,用以设置管理器的水平和垂直方向的间距。
应用边界布局
应用边界布局管理器,首先必须调用容器的setLayout()方法设置该容器使用边界布局管理器,然后调用容器Container类的add()方法添加组件时可以设置此组件的布局区域。
实例:使用边界布局,实现在窗体中添加东西南北四个按钮。
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.WindowConstants; public class BorderTest extends JFrame{ public BorderTest(){ setTitle("边界布局管理器测试"); setBounds(100,100,300,200); JButton northButton = new JButton("北"); JButton southButton = new JButton("南"); JButton westButton = new JButton("西"); JButton eastButton = new JButton("东"); JButton centerButton = new JButton("中"); Container panel = getContentPane(); panel.add(northButton,BorderLayout.NORTH); panel.add(southButton,BorderLayout.SOUTH); panel.add(westButton, BorderLayout.WEST); panel.add(eastButton,BorderLayout.EAST); panel.add(centerButton,BorderLayout.CENTER); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args){ BorderTest test = new BorderTest(); test.setVisible(true); } }
3) 网格布局
网格布局管理器可以将组件以网格的形式排列起来,使用网格布局,容器被分成大小相等的矩形,每个矩形区域中可以放置一个组件,就像表格中的单元格一样整齐的排列。
创建网格布局管理器
GridLayout类表示网格布局管理器,容器通过setLayout()方法,将GridLayout作为对象,可将容器设置为网络布局的形式。
实例:使用网络布局,将窗体容器使用3*3的网络布局管理器,并在窗体中添加按钮
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.Font; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.WindowConstants; public class GridLayoutTest extends JFrame{ public GridLayoutTest(){ setTitle("边界布局管理器实例"); setBounds(100,100,300,200); JButton[] buttons = new JButton[9]; Container panel = getContentPane(); panel.setLayout(new GridLayout(3,3)); for(int i = 0;i<9;i++){ buttons[i] = new JButton("按钮"+(i+1)); panel.add(buttons[i]); } setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args){ GridLayoutTest gridLayout = new GridLayoutTest(); gridLayout.setVisible(true); } }4) 流式布局
流式布局是最基本得布局管理器,使用流式布局的容器按指定方向摆放组件。
实例:创建窗体,采用流式布局的形式排放控件,采用居中对齐的方式。
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.WindowConstants; public class FlowTest extends JFrame{ public FlowTest(){ setTitle("本窗口使用流布局管理器"); Container c = getContentPane(); getContentPane().setLayout( new FlowLayout(FlowLayout.CENTER,10,10) ); for(int i=0;i<10;i++){ c.add(new JButton("按钮"+i)); } setSize(300,200); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args){ FlowTest flowTest = new FlowTest(); } }2.基本控件
1) 标签控件
标签控件用于显示文本或提示信息,支持文本字符串和图标。
JLabel的构造方法:
JLabel() 创建一个既无内容又无图像的标签
JLabel(String text) 创建一个有文本内容的标签
JLabel(String textr, int horizontalAlignment) 创建一个具有文本内容且水平显示的标签
JLabel(Icon icon)创建一个具有图像内容的标签
。。。
2) 普通按钮控件
在Swing中JButton表示按钮控件。常用构造方法:
JButton(String text) 创建一个带有文本标识的按钮
JButton(Icon icon) 创建一个带有图像标识的按钮
JButton(String text,Icon icon) 创建一个既有文本又有图像的按钮
实例:创建窗体,实现在窗体中添加“查看”与“帮助”两个按钮,在按钮上还添加图片
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.WindowConstants; public class JbuttonDemo extends JFrame{ public static void main(String[] args){ JbuttonDemo frame = new JbuttonDemo(); frame.setVisible(true); } public JbuttonDemo(){ super(); setTitle("按钮实例"); ImageIcon editIcon = new ImageIcon(getClass().getResource("watch.png")); ImageIcon delIcon = new ImageIcon(getClass().getResource("help.png")); getContentPane().setLayout(new FlowLayout()); setBounds(100,100,215,74); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton okButton = new JButton("查看",editIcon); JButton delButton = new JButton(); getContentPane().add(okButton); delButton.setIcon(delIcon); delButton.setText("帮助"); getContentPane().add(delButton); } }3) 单选按钮控件
JRadioButton组件实现了一个单选按钮。JRadioButton可以单独使用,也可以与ButtonGroup类联合使用。
实例:创建框体,在窗体中创建3个单选按钮,并将这3个按钮添加到同一个按钮组中,设置第一个单选按钮初试为选中状态。
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.WindowConstants; public class JRadioMemo extends JFrame{ public JRadioMemo(){ super(); setTitle("单选按钮示意"); ButtonGroup group =new ButtonGroup(); getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); setBounds(100,100,230,87); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JRadioButton rb = new JRadioButton(); group.add(rb); rb.setText("优秀"); getContentPane().add(rb); JRadioButton rb_1 = new JRadioButton("良好",true); group.add(rb_1); getContentPane().add(rb_1); JRadioButton rb_2 = new JRadioButton("及格"); group.add(rb_2); getContentPane().add(rb_2); } public static void main(String[] args){ JRadioMemo JRM = new JRadioMemo(); JRM.setVisible(true); } }
4) 复选框控件
JCheckBox类实现了一个复选框。
实例:创建窗体,在窗体中定义复选框组件,用户可以选择多个。
package qijia.si; import java.awt.BorderLayout; import java.awt.Container; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextField; import javax.swing.WindowConstants; public class CheckBoxDemo extends JFrame{ public CheckBoxDemo(){ super(); getContentPane().setLayout(null); setBounds(100,100,310,103); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JCheckBox cb0 = new JCheckBox(); cb0.setBounds(10,34,64,26); cb0.setText("上网"); getContentPane().add(cb0); JCheckBox cb1 =new JCheckBox("旅游"); cb1.setBounds(84,35,64,26); getContentPane().add(cb1); JCheckBox cb2 = new JCheckBox("看书"); cb2.setBounds(158,34,64,26); getContentPane().add(cb2); JCheckBox cb3 = new JCheckBox("听歌"); cb3.setBounds(232,34,64,26); getContentPane().add(cb3); final JLabel label = new JLabel(); label.setText("你的爱好是: "); label.setBounds(10, 10, 91, 18); getContentPane().add(label); } public static void main(String[] args){ CheckBoxDemo Demo1 = new CheckBoxDemo(); Demo1.setVisible(true); } }
发表评论
-
JavaSE20—绘图
2011-05-18 20:10 1504JavaSE20—绘图 1. 绘制图形 Graphics类是 ... -
JavaSE19—Swing高级控件(下)
2011-05-15 17:28 1089JavaSE19—Swing高级控件(下) 1. 工具栏与对话 ... -
JavaSE18—Swing高级控件(上)
2011-05-12 22:22 1497JavaSE18—Swing高级控件(上) 1. 为窗体添加 ... -
JavaSE17—GUI事件
2011-05-08 20:52 1042JavaSE17—GUI事件处理机 ... -
JavaSE15—多线程
2011-05-03 19:10 828JavaSE15—多线程 1. 多线程简介 程序:程序是计算 ... -
JavaSE14—窗体程序开发(下)
2011-05-01 16:55 968JavaSE14—窗体程序开发(下) 1. 基础组件(续) ... -
JavaSE12—窗体程序开发(上)
2011-04-29 16:59 1465JavaSE12—窗体程序开发 ... -
JavaSE11—网络编程初步
2011-04-29 16:58 941JavaSE11—网络编程初步 1. 背景知识 1) 端口 ... -
JavaSE 10 —IO流
2011-04-28 20:00 863JavaSE 10 —IO流 1.IO流简介 Java的输入 ... -
JavaSE09—Java类集框架
2011-04-26 19:32 834JavaSE09—Java类集框架 1. 类集接口 接口: ... -
JavaSE08—包,访问权限及异常处理
2011-04-26 19:31 630JavaSE08—包,访问权限 ... -
JavaSE07—Java常用类库
2011-04-26 19:30 627JavaSE07—Java常用类库 1. String类和S ... -
JavaSE06—类的其他问题
2011-04-26 19:28 664JavaSE06—类的其他问题 1. Objec ... -
JavaSE05—抽象类与接口
2011-04-26 19:27 620JavaSE05—抽象类与接口 1. ... -
JavaSE04—类的封装,继承与多态
2011-04-26 19:26 684JavaSE04—类的封装,继 ... -
JavaSE03—类和对象
2011-04-26 19:24 627JavaSE03—类和对象 1. ... -
Java SE02——数组
2011-04-26 19:23 628Java SE02——数组 1. 数组的声 ... -
Java SE01——原生数据类型
2011-04-26 19:18 831Java SE01——原生数据类型 1.Java中的数据类 ...
相关推荐
《JavaSE应用程序设计》,作者:张利国、刘伟,北京科海电子出版社
由gui编程,javase技术开发的随机点名程序,适用于班级点名!
这个文件里的内容适合Java初学者,这是一些关乎JavaSE面向程序的相关知识以及一些Java的基础使用规则、类的定义规则、方法的定义方式等等。这也是小编在刚开学学习JavaSE时记录的一些笔记,里面的内容非常适合JavaSE...
JavaSE技术题Java开发过程中的面试
JavaSE笔试程序题(20180307)JavaSE笔试程序题(20180307)
基于javase的网上商城例子程序
一个基于JavaSe的超市管理系统,简单的桌面应用程序,有数据库建库源码
java API官方下载的文档,为Java SE Development Kit 10.0.1 Documentation,html格式
java基础学习的例子,耐心的看每个例子,大家肯定受益非浅
java初学者可以看看,第一个小项目ATM的实现,代码注释非常详细,很有成就感。
三年JavaEE开发积累的那些代码之一:JavaSE篇 有什么? 1)自己写的例子:或是为了项目中应用写的demo,或是为了学习某项技术写的demo。 2)网上下载的例子:或改过或没改过,或完善过或原封没动。 没什么? 1)公司...
JavaSE基本知识 适合新手入门 JavaSE基本知识 适合新手入门 JavaSE基本知识 适合新手入门
javase api 中文文档,文便不是很精通英文的朋友查看
javaSE
这是北京科海出版的JavaSE应用程序设计一书的配套源码。 由张利国和刘伟主讲,适合Java初学者学习。
测试javase的程序包, 里面有一个文档描述了测试代码
赠送jar包:javase-2.2.jar; 赠送原API文档:javase-2.2-javadoc.jar; 赠送源代码:javase-2.2-sources.jar; 赠送Maven依赖信息文件:...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
自己写的课程设计 javaSE 实现石头剪刀布(带窗体界面)
赠送jar包:javase-3.3.3.jar; 赠送原API文档:javase-3.3.3-javadoc.jar; 赠送源代码:javase-3.3.3-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。