Java面向对象笔记 • 【第10章 Swing编程初级应用】
全部章节 >>>>
本章目录
10.3.2 JTextField与JPasswordField标签组件
10.4.2 JRadioButton单选按钮和JCheckBox复选框组件
10.1 JFrame窗口容器
10.1.1 Swing介绍
- Swing 是一个为Java设计的GUI( Graphical User Interface,图形用户界面)工具包。
- Swing由纯Java实现,不再依赖于本地平台的GUI,因此可以在所有操作系统平台上都保持相同的界面外观。
- 独立于本平台的Swing组件称为轻量级组件。
- Swing组件位于javax.swing包。
- Swing组件采用MVC(Model-View-Controller,即模型-视图-控制器)的设计模式,其中模型用于维护各种状态,视图是组件可视化的表现,控制器用于对各种事件、组件做出相应的响应。当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据进行更新。
10.1.2 JFrame窗口容器应用
- GUI应用程序都需要使用窗体作为最外层的容器,应用中需要使用的其他控件均直接或间接放在窗体中。
- 在Swing GUI中,JFrame是一个顶层容器,可以存放其他组件。
- JFrame类包含了许多实用方法,如定义窗口标题、窗体边框、窗口的大小和位置等。通常通过继承JFrame类来创建一个窗口。
创建窗体的两种方式:
- 直接编写代码,调用JFrame类的构造方法,这种方式适用于窗体简单的情况。
- 继承JFrame类。在继承的类中编写代码,对窗体进行详细的描述,这种方式适用于窗体较复杂的情况。
注意:
JFrame类构造方法创建的窗体是不可见的,需要开发人员通过硬编码的方式,设置窗体的可见性。
JFrame类构造方法创建的窗体默认的大小为0 x 0像素,默认的坐标是(0,0),因此在开发中需要设置窗体的大小。
JFrame常用方法
方法名 |
说明 |
void setLayout(LayoutManager mg) |
设置当前窗体使用的布局管理器 |
void setTitle(String title) |
设置当前窗体的标题 |
void setBounds(int x,int y,int width, int hight) |
设置当前窗体距离桌面坐标原点的位置,x代表横坐标,y代表纵坐标。以及当前窗体的大小,width代表窗体的宽,height代表窗体的高 |
void setSize(int width,int height) |
设置当前窗体的宽和高 |
void setVisible(boolean b) |
设置当前窗体是否可见,参数值为true,表示可以见,为false则表示隐藏当前窗体 |
void setIconImage(Image image) |
设置当前窗体的图标 |
Component add(Component c) |
将指定组件添加至当前窗体中 |
示例:创建JFrame窗体
public class JFrameExample {
public void init(){
//创建窗体对象
JFrame frame=new JFrame();
//修改窗体图标为“android.gif”
ImageIcon ico=new ImageIcon("E://android.gif");
//设置JFrame窗体的显示位置和大小
frame.setBounds(100,100, 450, 300);
//设置窗体的标题
frame.setTitle("JFrame窗体");
//设置窗体的图标
frame.setIconImage(ico.getImage());
//窗体显示
frame.setVisible(true);
}
public static void main(String[] args) {
JFrameExample jfe=new JFrameExample();
jfe.init();
}
}
10.1.3 实践练习
10.2 布局管理器
10.2.1 FlowLayout流式布局管理器
- 类似流程或文本处理器处理一段文字,它将组件一排一排依次放置。
- 常用于JRadioButton单选按钮或JCheckBox复选框等组件的排列。
FlowLayout构造方法说明
构造方法 |
说明 |
FlowLayout() |
使用居中方式构造FlowLayout的布局 |
FlowLayout(int align) |
使用给定对齐方式,且垂直和水平间隔为5个像素。 例如,setLayout(new FlowLayout(FlowLayout.LEFT)); |
FlowLayout(int align,int hgap,int vgap) |
使用给定对齐方式,且指定垂直和水平间隔。容器默认居中放置。hgap和vgap为组件之间垂直和水平间隔(单位为像素)。 例如,setLayout(new FlowLayout(FlowLayout.RIGHT,20,40)); |
示例: 按流式布局管理器格式放置兴趣课程单选按钮
public class FlowLayExample extends JFrame {
public FlowLayExample() {
super("FlowLayout布局管理器");
}
public void init(){
JRadioButton jrb1=new JRadioButton("音乐"); //创建单选按钮
JRadioButton jrb2=new JRadioButton("体育");
...
this.add(jrb1);
this.add(jrb2);
//创建FlowLayout管理器对象
FlowLayout fl=new FlowLayout(FlowLayout.RIGHT,5,15);
//指定JFrame窗体布局管理器
this.setLayout(fl);
this.setSize(300,150);
this.setVisible(true);
}
public static void main(String[] args) {
FlowLayExample layExample=new FlowLayExample();
layExample.init();
}
}
10.2.2 GridLayout网格布局管理器
- 网格布局管理器即GridLayout布局管理,其布局管理格式是将窗体分割成行数×列数的格子状版面,组件按照由左至右,由上而下的次序排列。
GridLayout构造方法说明
构造方法 |
说明 |
GridLayout |
构造具有一行一列的Gridlayout的布局 |
GridLayout(int rows,int cloumns) |
构造指定行数和列数的GridLayout的布局 |
GridLayout(int rows, int cloumns,int hgap,int vgap) |
构造指定行数和列数的、各组件之间的相互间隔的GridLayout的布局 |
示例:按网格布局管理器格式放置JButton按钮
public class GridLayoutExample extends JFrame{
//创建布局管理器
private GridLayout gridLayout=new GridLayout();
...
public void init(){
JButton btn1=new JButton("按钮1");
JButton btn2=new JButton("按钮2");
...
//设置窗体的布局格式
this.setLayout(gridLayout);
gridLayout.setColumns(3);//设置列数
gridLayout.setHgap(5);//设置垂直间距
gridLayout.setRows(3);//设置行数
gridLayout.setVgap(5);//设置水平间距
//依次将标签、文本框、下拉列表框添加到this中
this.add(btn1,null);
this.add(btn2,null);
...
//设置窗体可见
this.setVisible(true);
}
...
}
GridLayout网格布局与FlowLayout流式布局相同,都会自动管理组件的大小和位置,两者的不同之处是,网格布局会尽可能的将组件充满窗口,而流式布局则不会。
10.2.3 BoraderLayout边框布局管理器
- BorderLayout的布局管理器将容器内的空间分为东、西、南、北、中5个区域,分别用EAST、WEST、SOUTH、NORTH、CENTER表示。
- 向容器中加入每个组件时,都要指明其放在容器的哪个区域,如果某个区域没有分配组件,则其他组件可以占据该区域的控件。
BorderLayout构造方法说明
构造方法 |
说明 |
BorderLayout() |
构造BorderLayout的布局 |
BorderLayout(int hgap,int vgap) |
构造组件之间具有指定间隔的BorderLayout布局 |
示例:按边框布局管理器格式放置JButton按钮
public void init(){
//创建JButton对象
btn1=new JButton("东");
btn2=new JButton("南");
btn3=new JButton("西");
btn4=new JButton("北");
btn5=new JButton("中");
BorderLayout bl=new BorderLayout();
this.getContentPane().setLayout(bl);
//将5个按钮分别添加到窗口的不同区域
this.add(btn1,BorderLayout.EAST);
this.add(btn2,BorderLayout.WEST);
this.add(btn3,BorderLayout.SOUTH);
this.add(btn4,BorderLayout.NORTH);
this.add(btn5,BorderLayout.CENTER);
this.setSize(450,300);
this.setVisible(true);
}
10.2.4 实践练习
10.3 常用控件(一)
10.3.1 JLabel标签组件
- JLabel类创建标签组件,它除了能显示文字外,还允许添加图像,且当鼠标移动到标签位置时,会显示一段文字提示
示例:JLabel标签示例
//通过调用父类构造器为窗体创建名称
super("JLabel组件窗口");
//设置流式布局管理器
this.setLayout(new FlowLayout(100,100,100));
//创建图片ImageIcon对象
Icon icon=new ImageIcon("e://mst.png");
//设置标签中仅包含文字
label1=new JLabel(icon);
//设置标签中仅包含文字、图像水平居中
label2=new JLabel("MStanford");
label2.setIcon(icon);
//设置标签的提示信息
label1.setToolTipText("只是一个Label标签");
//添加label1
this.add(label1);
this.add(label2);
10.3.2 JTextField与JPasswordField标签组件
- JTextField只能用于输入单行文本,如果文本的长度超出了控件可以显示的范围,其会自动滚动文本。
- 针对JTextField,所有的剪切、复制、粘贴及其快捷键的操作都可以自动工作。
- JPasswordField密码框组件。继承自JTextField,因此其操作方法与JTextFiled相同。
示例:JTextField和JPasswordField标签示例
this.setSize(360,230);
//使用空布局,容器中的组件可通过坐标定位
this.setLayout(null);
jLabel1=new JLabel("账号");
//设置jLabel1的位置,4个参数代表居左、居上,文字的宽、高
jLabel1.setBounds(30,38,80,25);
jLabel2=new JLabel("密码");
jLabel2.setBounds(30,80,80,25);
//jTextField1的位置4个参数代表居左、居上,文本框的宽、高
jTextField.setBounds(100,40,160,25);
jPasswordField.setBounds(100,80,160,25);
//将组件添加至容器中
this.add(jLabel1);
this.add(jLabel2);
this.add(jTextField);
this.add(jPasswordField);
10.3.3 JButton按钮组件
- JButton可以设置文字、图形,还可以设置底色、动态效果等。
示例:JButton按钮组件示例
Icon icon1=new ImageIcon("E://sure.png");
Icon icon2=new ImageIcon("E://refresh.jpg");
Icon icon3=new ImageIcon("E://download.jpg");
//创建按钮,并在按钮上添加图标
JButton button1=new JButton("确定",icon1);
JButton button2=new JButton("刷新",icon2);
JButton button3=new JButton("下载",icon3);
this.add(button1);
this.add(button2);
this.add(button3);
this.setSize(600,200);
this.setVisible(true);
10.3.4 JPanel面板组件
- JPanel面板是非常常用的非顶层容器之一,可以将其他控件放在JPanel中,以组成一个子界面。
- 所谓的非顶层容器通常扮演双重角色,对于添加到其中的控件,其扮演容器的角色,而对于其要添加进的容器,则其扮演一般控件的角色。
- 通过嵌套使用JPanel,可以搭建出复杂美观的界面。
示例:JPanel和布局管理器综合示例
public void init(){
//设置布局管理器
GridLayout gl=new GridLayout();
BorderLayout bl=new BorderLayout();
FlowLayout fl=new FlowLayout();
//创建按钮
JButton button1=new JButton("确定");
JButton button2=new JButton("取消");
//创建标签
JLabel label1=new JLabel("姓名");
JLabel label2=new JLabel("性别");
JLabel label3=new JLabel("年龄");
//创建文本框
JTextField text1=new JTextField();
JTextField text2=new JTextField();
JTextField text3=new JTextField();
//设置窗口大小
this.setSize(400,192);
this.setLayout(bl);
//将两个按钮放入到jPanel1中,将jPanel1设置为FlowLayout布局
jPanel1.setLayout(fl);
//将button放置于jPaenl1中
jPanel1.add(button1);
jPanel1.add(button2);
//设置jPanel2为GridLayout布局,3行2列的布局格式
jPanel2.setLayout(gl);
gl.setColumns(2);//设置列数
gl.setHgap(5);//这是垂直间距
gl.setRows(3);//设置行数
gl.setVgap(5);//设置水平间距
//依次将标签、文本框添加到jPanel2中
jPanel2.add(label1);
jPanel2.add(text1);
jPanel2.add(label2);
jPanel2.add(text2);
jPanel2.add(label3);
jPanel2.add(text3);
//依次将jPanel1、jPanel2添加到窗口的下方和中间位置
this.add(jPanel1,BorderLayout.SOUTH);
this.add(jPanel2,BorderLayout.CENTER);
…
}
10.3.5 实践练习
10.4 常用控件(二)
10.4.1 JComboBox选择框组件
JComboBox为下拉列表框组件,其特点是将所有选项折叠收藏,仅显示前面一个选项或被用户选中的某一个选项。
JComboBox常用方法说明
构造方法 |
说明 |
addItem(Object anObject) |
为下拉列表添加下拉项 |
setMaximumRowCount(int count) |
设置JComboBox显示的最大行数 |
示例:使用JComboBox下拉显示国籍信息
//创建下拉列表框对象
jComboBox=new JComboBox();
//为列表添加下拉选项
jComboBox.addItem("中国");
jComboBox.addItem("美国");
jComboBox.addItem("德国");
jComboBox.addItem("韩国");
jComboBox.addItem("英国");
//设置下拉列表框最多显示4行
jComboBox.setMaximumRowCount(4);
//将下拉列表框添加到jPanel中
jPanel.add(jLabel);
jPanel.add(jComboBox);
this.add(jPanel);
this.setSize(300, 200);
this.setVisible(true);
10.4.2 JRadioButton单选按钮和JCheckBox复选框组件
- JRadionButton表示单选按钮。
- ButtonGroup类为单选按钮提供多选一功能,在一组单选按钮中,用户只能选择一个单选按钮,当选择一个单选按钮时,此单选按钮的状态为“ON”,其余单选按钮的状态为“OFF”
- JCheckBox表示复选框,一组复选框中可以有多个复选框同时被选中。
使用JRadioButton组件,首先需要创建ButtonGroup对象,然后将创建的JRadioButton组件对象,添加至ButtonGroup对象中。
示例:JRadioButton单选按钮和JCheckBox复选框组件示例
//创建单选按钮组对象
private ButtonGroup group=new ButtonGroup();
jLabel=new JLabel("兴趣");
jLabe2=new JLabel("性别");
//复选框
box1=new JCheckBox("台球");
box2=new JCheckBox("篮球");
box3=new JCheckBox("编程");
jLabe2=new JLabel("性别");
//单选按钮
jbr1=new JRadioButton("男性");
jbr2=new JRadioButton("女性");
//添加单选按钮到单选按钮组
group.add(jbr1);
group.add(jbr2);
//添加单选按钮到窗口
this.add(jLabel);this.add(box1);this.add(box2);
this.add(box3);this.add(jLabe2);this.add(jbr1);this.add(jbr2);
10.4.3 实践练习
总结:
Swing是一个为Java设计的GUI( Graphical User Interface,图形用户界面)工具包,它由纯Java实现,不再依赖于本地平台的GUI,因此可以在所有操作系统平台上都保持相同的界面外观。Swing组件为轻量级组件。
JFrame是一个顶层容器,可以存放其他组件。
常见的布局管理器
FlowLayout流式布局管理器:类似流程或文本处理器处理一段文字,它将组件一排一排依次放置。
GridLayout网格布局管理器:其布局管理格式是将窗体分割成行数×列数的格子状版面,组件按照由左至右,由上而下的次序排列。
和BorderLayout边框布局管理器:将容器内的空间分为东、西、南、北、中5个区域,分别用EAST、WEST、SOUTH、NORTH、CENTER表示。
Swing常用组件有JLabel标签、JTextField文本、JPasswordField密码、JButton按钮、JPanel面板、JComboBox选择框、JRadioButton单选按钮、JCheckBox复选框。
使用JRadioButton组件,首先需要创建ButtonGroup对象,然后将创建的JRadioButton组件对象,添加至ButtonGroup对象中。
Java面向对象笔记 • 【第10章 Swing编程初级应用】的更多相关文章
- Java面向对象程序设计第9章1-9
Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...
- Java面向对象笔记 • 【第3章 继承与多态】
全部章节 >>>> 本章目录 3.1 包 3.1.1 自定义包 3.1.2 包的导入 3.1.3 包的访问权限 3.1.4 实践练习 3.2 继承 3.2.1 继承概述 3 ...
- 20191105 《Spring5高级编程》笔记-第10章
第10章 使用类型转换和格式化进行验证 在应用程序开发中,数据验证通常与转换和格式化一起被提及.因为数据源的格式很可能与应用程序中所使用的格式不同. 名词缩写: SPI(Service Provide ...
- <<Python基础教程>>学习笔记 | 第10章 | 充电时刻
第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...
- Java 学习笔记 ------第六章 继承与多态
本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...
随机推荐
- 【♪♪♪】网易云音乐mp3真实地址
参考别人的博客,得到下面的地址,填上ID号即可,后缀的[.mp3]不用输入 http://music.163.com/song/media/outer/url?id= 例如 最终,合并地址为 http ...
- ClassLoad类加载器与双亲委派模型
1. 类加载器 Class类描述的是整个类的信息,在Class类中提供的方法getName()是根据ClassPath配置的路径来进行类加载的.若类加载的路径为文件.网络等时则必须进行类加载这是就需要 ...
- oracle to_char处理日期
select to_char(sysdate,'d') from dual;--本周第几天 select to_char(sysdate,'dd') from dual;--本月第几天 select ...
- Linux服务器---论坛discuz
Discus Discuz是一款免费的论坛管理系统,大量的使用了AJAX,内部有丰富的模板风格. 1.下载discuz软件(https://cn.wordpress.org/download/rele ...
- js实现递归菜单无限层
/*动态加载菜单*/ function dynamicMenu(data){ if (userID != "admin"){ //1.清空所有菜单 $("#menuLis ...
- 【Linux】【Services】【DNS】使用Bind搭建DNS服务
1. 简介 1.1. 实现的功能:DNS解析以及智能转发 1.2. 官方文档: 1.3. 基础概念:http://www.cnblogs.com/demonzk/p/6494968.html 2. 环 ...
- vue实现input输入框的模糊查询
最近在用uni-app做一个项目,使用的框架还是vue,想了好久才做出来 . HTML代码部分 <input type="text" focus class="s ...
- gitlab的分支保护配置
目录 一.简介 二.Gitlab配置步骤 一.简介 开发当前开发的分支遇到暂时无法解决的问题,现在有需要开发其他应用,所以希望运维这边将当前有问题分支冻结,让其他人无法进行修改,待后续有时间在排查代码 ...
- 原来这才是 Socket !
关于对 Socket 的认识,大致分为下面几个主题,Socket 是什么,Socket 是如何创建的,Socket 是如何连接并收发数据的,Socket 套接字的删除等. Socket 是什么以及创建 ...
- LightningChart .NET v.10.2.1已经发布了!
LightningChart .NET v.10.2.1已经发布了! 了解更多关于兼容性和优化方面的最新改进. 主要改进 我们很高兴地宣布LightningChart .NET产品系列的第三个主要版本 ...