Java面向对象笔记 • 【第10章 Swing编程初级应用】

全部章节   >>>>


本章目录

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组件采用MVCModel-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 setTitleString 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)

使用给定对齐方式,且指定垂直和水平间隔。容器默认居中放置。hgapvgap为组件之间垂直和水平间隔(单位为像素)。

例如,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个区域,分别用EASTWESTSOUTHNORTHCENTER表示
  • 容器中加入每个组件时,都要指明其放在容器的哪个区域,如果某个区域没有分配组件,则其他组件可以占据该区域的控件。

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相同

示例:JTextFieldJPasswordField标签示例

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设计的GUIGraphical User Interface,图形用户界面)工具包,它由纯Java实现,不再依赖于本地平台的GUI,因此可以在所有操作系统平台上都保持相同的界面外观。Swing组件为轻量级组件

JFrame是一个顶层容器,可以存放其他组件

常见的布局管理器

FlowLayout流式布局管理器:类似流程或文本处理器处理一段文字,它将组件一排一排依次放置。

GridLayout网格布局管理器:其布局管理格式是将窗体分割成行数×列数的格子状版面,组件按照由左至右,由上而下的次序排列。

BorderLayout边框布局管理器:将容器内的空间分为东、西、南、北、中5个区域,分别用EASTWESTSOUTHNORTHCENTER表示

Swing常用组件有JLabel标签、JTextField文本、JPasswordField密码、JButton按钮、JPanel面板、JComboBox选择框JRadioButton单选按钮、JCheckBox复选框

使用JRadioButton组件,首先需要创建ButtonGroup对象,然后将创建的JRadioButton组件对象,添加至ButtonGroup对象中。

猜你喜欢

转载自blog.csdn.net/weixin_44893902/article/details/106792058