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面向对象编程技术的一块基石,因为它允许创建分 ...
随机推荐
- Linux FTP的主动模式与被动模式
Linux FTP的主动模式与被动模式 一.FTP主被动模式 FTP是文件传输协议的简称,ftp传输协议有着众多的优点所以传输文件时使用ftp协议的软件很多,ftp协议使用的端口是21( ...
- Oracle中的job(定时任务)
oracle中的job(定时任务)由dbms_job包下的函数实现.关于job的理论知识可参考https://blog.csdn.net/apextrace/article/details/77675 ...
- SpringMVC responseBody注解分析
@responsebody表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@respo ...
- java职业路线图
- Oracle删除重复数据记录
删除重复记录,利用ROWID 和MIN(或MAX)函数, ROWID在整个数据库中是唯一的,由Oracle自己产生和维护,并唯一标识一行(无论该表中是否有主键和唯一性约束),ROWID确定了每条记录在 ...
- 【Service】【MiddleWare】【Message】rabbitMQ
1. 概念: 1.1. 消息型中间件:遵循AMQP协议(高级消息队列协议)AMQP 0-9-1 AMQP 1.0 1.2. 路由模型: direct topic fan-out headers 1.3 ...
- 线程开启的第一种方法:通过创建Thread的子类的对象的方式
package cn.itcast.demo16.demo06.Thread;/** * @author newcityman * @date 2019/7/22 - 21:47 */public c ...
- SpringSecurity Oauth2.0
1.用户认证分析 上面流程图描述了用户要操作的各个微服务,用户查看个人信息需要访问客户微服务,下单需要访问订单微服务,秒杀抢购商品需要访问秒杀微服务.每个服务都需要认证用户的身份,身份认证成功后,需要 ...
- Nginx区分内部与外部
目录 一.简介 二.配置 一.简介 场景: 当网站需要维护时,访问任何连接都显示维护页面 原理: 将任何访问都重定向到维护页面. 二.配置 server { listen 80; index inde ...
- css预处理器和css Modules是干嘛的?
CSS预处理器 1.css和js的区别 js是编程语言,它可以声明变量,编写逻辑.而css实际上只是个"表",表头是选择器,内容是里面的样式.它并不能写逻辑啥的.也就是说,对于cs ...