全部章节   >>>>


本章目录

10.1 JFrame窗口容器

10.1.1 Swing介绍

10.1.2 JFrame窗口容器应用

JFrame常用方法

10.1.3 实践练习

10.2 布局管理器

10.2.1 FlowLayout流式布局管理器

FlowLayout构造方法说明

10.2.2 GridLayout网格布局管理器

GridLayout构造方法说明

10.2.3 BoraderLayout边框布局管理器

BorderLayout构造方法说明

10.2.4 实践练习

10.3 常用控件(一)

10.3.1 JLabel标签组件

10.3.2 JTextField与JPasswordField标签组件

10.3.3 JButton按钮组件

10.3.4 JPanel面板组件

10.3.5 实践练习

10.4 常用控件(二)

10.4.1 JComboBox选择框组件

JComboBox常用方法说明

10.4.2 JRadioButton单选按钮和JCheckBox复选框组件

10.4.3 实践练习

总结:


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类来创建一个窗口。

创建窗体的两种方式:

  1. 直接编写代码,调用JFrame类的构造方法,这种方式适用于窗体简单的情况。
  2. 继承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编程初级应用】的更多相关文章

  1. Java面向对象程序设计第9章1-9

    Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...

  2. Java面向对象程序设计第7章1-8

    Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...

  3. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  4. Java面向对象程序设计第14章3-8和第15章6

    Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...

  5. Java面向对象程序设计第8章3-5

    Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...

  6. Java面向对象笔记 • 【第3章 继承与多态】

    全部章节   >>>> 本章目录 3.1 包 3.1.1 自定义包 3.1.2 包的导入 3.1.3 包的访问权限 3.1.4 实践练习 3.2 继承 3.2.1 继承概述 3 ...

  7. 20191105 《Spring5高级编程》笔记-第10章

    第10章 使用类型转换和格式化进行验证 在应用程序开发中,数据验证通常与转换和格式化一起被提及.因为数据源的格式很可能与应用程序中所使用的格式不同. 名词缩写: SPI(Service Provide ...

  8. &lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  9. Java 学习笔记 ------第六章 继承与多态

    本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...

随机推荐

  1. Android 极光推送集成

    集成Jpush 1.用Android Studio创建一个Demo 2.创建激光推送开发者账号,要创建极光推送开发者帐号,请访问极光推送官方网站https://www.jiguang.cn/push ...

  2. hive 启动不成功,报错:hive 启动报 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapred/MRVersi

    1. 现象:在任意位置输入 hive,准备启动 hive 时,报错: Exception in thread "main" java.lang.NoClassDefFoundErr ...

  3. idea如何在git上将分支代码合并到主干

    1.首先将idea中的代码分支切换到master分支,可以看到我们在dev上提交的代码 在master上是没有的 2.如图所示,在remote branch 上选择分支,点击后面的三角图标,展开之后选 ...

  4. 登录界面.jsp

    <!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="utf-8&q ...

  5. 正则表达式入门(js版)

    什么是正则表达式 正则表达式 Regular Expression (构造函数 RegExp) 用于字符串匹配规则 要么匹配字符,要么匹配位置 如何新建正则表达式 字面量 /[ab]/gim cons ...

  6. 通过静态分析和持续集成 保证代码的质量 (Helix QAC)1

    前言 现代软件开发团队面临着很多挑战,这些挑战包括:产品交付期限越来越紧,团队的分布越来越广,软件的复杂度越来越高,而且对软件的质量要求越来越高. 本文分为两个章节.第一章讨论持续集成的原理,持续集成 ...

  7. 磁盘管理LVM

    目录 一.简介 二.操作 环境简介 操作 一.简介 LVM全称为Logical Volume Management,它是Linux环境下对磁盘分区进行管理的一种机制,它可以将多个硬盘合成一个资源池,然 ...

  8. 安装火狐浏览器报错找不到VCRUNTIME140_1.DLL

    产生原因参考及下载地址:https://cn.dll-files.com/vcruntime140_1.dll.html vcruntime140_1.dll 相关的错误可能源于多种不同原因.比如,错 ...

  9. [BUUCTF]REVERSE——[WUSTCTF2020]level1

    [WUSTCTF2020]level1 附件 步骤: 下载下来的附件有两个,output.txt里是一堆数字 64位ida打开第一个附件,检索字符串,发现了flag字样 双击跟进,ctrl+x交叉引用 ...

  10. 🔥🔥🔥【已开源】Flutter 腾讯优量汇广告插件,帮助开发者获利 - FlutterAds

    前言 Flutter 已成为目前最流行的跨平台框架之一,在近期的几个大版本的发布中都提到了 Flutter 版本 Google 广告插件 [google_mobile_ads] .对于"出海 ...