全部章节   >>>>


本章目录

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. 容器之分类与各种测试(三)——slist的用法

    slist和forward_list的不同之处在于其所在的库 使用slist需要包含 #include<ext\list> 而使用forward_list则需要包含 #include< ...

  2. Java Jar包压缩、解压使用

    什么是jar包JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件. 如何打/解包使用jdk/bin/jar.exe工具,配置完环境 ...

  3. weak和拷贝

    weak/拷贝 1. weak 只要没有strong指针指向对象,该对象就会被销毁 2. 拷贝 NSString和block用copy copy语法的作用 产生一个副本 修改了副本(源对象)并不会影响 ...

  4. poi做一个简单的EXCAL

    //创建一个实体类 package text; import java.util.Date; public class Student { private int id; private String ...

  5. redis入门到精通系列(九):redis哨兵模式详解

    (一)哨兵概述 前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave.现在有这样一种情况,master宕机了,这时系统会选择一台slave作为m ...

  6. Mysql-高性能索引策略及不走索引的例子总结

    Mysql-高性能索引策略 正确的创建和使用索引是实现高性能查询的基础.我总结了以下几点索引选择的策略和索引的注意事项: 索引的使用策略: (PS:索引的选择性是指:不重复的索引值,和数据表的记录总数 ...

  7. 【Spark】【RDD】初次学习RDD 笔记 汇总

    RDD Author:萌狼蓝天 [哔哩哔哩]萌狼蓝天 [博客]https://mllt.cc [博客园]萌狼蓝天 - 博客园 [微信公众号]mllt9920 [学习交流QQ群]238948804 目录 ...

  8. JDK各版本新增的主要特性总结

    JDK1.5新特性: 1.自动装箱与拆箱: 2.枚举 3.静态导入,如:import staticjava.lang.System.out 4.可变参数(Varargs) 5.内省(Introspec ...

  9. 腾讯新闻基于 Flink PipeLine 模式的实践

    摘要  :随着社会消费模式以及经济形态的发展变化,将催生新的商业模式.腾讯新闻作为一款集游戏.教育.电商等一体的新闻资讯平台.服务亿万用户,业务应用多.数据量大.加之业务增长.场景更加复杂,业务对实时 ...

  10. mysql优化大全(转自别人 )

    文章出处:https://blog.csdn.net/weixin_38112233/article/details/79054661 数据库优化 sql语句优化 索引优化 加缓存 读写分离 分区 分 ...