Java学习12——书本自学

第13章        图形界面设计

图形用户界面是应用程序与用户交互的窗口,利用它可以接受用户的输入并向用户输出程序运行的结果。

13.·1  用户图形界面介绍

图形用户界面(GUI)是指用图形的方式,借助菜单、组件等标准界面元素和组件操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统操作运行结果以图形方式展现给用户的技术。

Java语言提供了两个处理图形用户界面的包:java.awt包和javax.swing包。

AWT是抽象窗口工具集Abstract Window Toolkit的缩写。但是,Java语言图形绘制组件并不是完全“平台独立”的,因此使用AWT包所编写的层序很可能在不同操作系统上有不一样的显示。

Swing为Java程序增添了一种新的能力,它可以根据一个给定环境而调整他们的外观和感觉,使得一个程序可以同时应用于多种操作平台,这种跨平台的灵活性使Java语言突显其网络编程方面游刃有余的功力。

随着时间的推移,使得swing成为一个带有丰富组件的一些组件,因此它成为JFC(Java Foundation Class)用户界面的功能核心部分。

13.2 图形用户界面工具包——Swing

设计Java图形用户界面的基本元素主要由图形用户界面包Swing提供。包括用户界面组件、事件处理模型、图形和图像工具、布局管理器等。

13.2.1  Swing组件分类

Java语言中构成GUI的各类元素称为组件(component)。构建GUI的类可以分为三组:容器类(container class)、辅助类(helper class)和组件类(component calss)。

WIndows类是可以自由移动的、不依赖其他容器而存在的窗口。Windows类有主要两个子孙类:窗口框架JFrame和对话框JDialog。JFrame是一种带标题栏并且可以改变大小的窗口,而JDialog则是一种带有标题栏但不能改变大小的窗口,JPanel类与窗口类似,是一宗没有标题的容器,且不能独立存在,必须包含在另外一个容器之中,如包含在JFrame和Web浏览器窗口中。

1.Swing容器的层次关系

JFrame、JApplet和JDialog继承其重型组件的所有功能,具有更为复杂的结构。一般的Swing窗口,实际上包含几个“层次”。

1)顶层容器(Top Level Container)

顶层容器是一个窗口容器对象,该对象中包含了Swing窗口的各个层次,在该对象里可以加入其他窗口对象。

2)根窗格(Root Pane)

根窗格是一个轻型容器,它是在创建顶层容器后自动创建的,供Swing顶层容器在后台使用,它是顶层容器中所包含的最内层,通常无法在这一层上做任何操作和处理。

3)分层窗格(Layered Pane)

加入分层窗格的组件可以设置其图形层次,且不会被内容窗格中的对象屏蔽。在分层窗格中的对象还可以设置其图层层次高低,图层层次较高的对象和图层层次较低的对象重叠时,层次低的对象会被屏蔽。这一层主要用于管理菜单栏和内容窗格。

4)内容窗格(Content Pane)

内容窗格是Container的一个实例,默认状态下他是一个具有BorderLayout布局管理器的JPanel对象。大部分的可见组件都放在内容窗格中。

5)玻璃窗格(Glass Pane)

在玻璃窗格这一层次上主要是用来产生绘图效果,以及触发窗口程序的各种事件。玻璃窗格浮在最上面,默认情况下是隐藏的。

2.框架类JFrame

图标对象语句语法:

Image iconImage=( new ImageIcon(filename)).getImage();

//filename:App13_1.java
import java.awt.Color;
import java.awt.Image;
import javax.swing.*;
public class App13_1
{
	static JFrame jfrm=new JFrame(" This is a swing program");
	public static void main(String[] args)
	{
		JLabel lab=new JLabel("I'm a label.");
		Image im=(new ImageIcon("zhong_guo_xin.jpg")).getImage();
		jfrm.setIconImage(im);
		jfrm.setSize(250,140);
		jfrm.setBackground(Color.YELLOW);
		jfrm.setLocation(260,150);
		jfrm.add(lab);
		jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jfrm.setVisible(true);
	}
}

3.面板类JPanel

面板是一种没有标题栏、没有边框的中间层容器,当然可以利用相应的方法为它添加边框。

JPanel类有如下优点:
JPanel不是顶层容器,它必须放入窗口或其他容器之内。

JPanel提供可以容纳其他组件的支持,在程序中经常用于布局和定位。

默认的布局管理器是FlowLayout,可,可使用setLayout()犯法改变其默认布局管理器。

作为JComponent的子类,JPanel可以使用JCompnent的优点,如双缓存技术和边框等。

4. 组件类

组件又称为控制组件,简称控件。与容器不同,组件类对象里面不能再包含其他组件。组件的作用是完成与用户的交互,包括用户的命令、接受用户输入的文本或用户的选择、向用户现实文本或图形等。

5.图形用户界面设计的步骤7

实现界面的工作主要有以下几点:

创建组件——创建组成图形界面的各种元素,如按钮、文本框等;

指定布局——根据具体需要排列图形界面上各元素的位置。

响应事件——定义图形用户界面的事件和各界面元素对不同事件的相应,从而实现图形用户界面的交互功能。

13.2.2 颜色类Color、字体类Font与图标类ImageIcon

1、颜色类Color

颜色类Color是java.awt包中常用的类之一,在Java语言中每一种颜色都看称是由红R、绿G、蓝B三原色组成,因此Color类的构造方法采用如下格式:

Color(int r,int g,int b)

2.字体类Font

字体类Font是java.awt包里的,是用来设置组件所用字体的样式、大小与字形等属性的。

Font(String font_name,int style, int size)

3. 图标类ImageIcon

图标是大小固定的图像,Java语言Javax.swing.ImageIcon类表示图标。图标通常情况下而且用来装饰组件。

13.3 创建组件

有了窗口之后,还要创建其他组件,然后将其添加到窗口。

13.3.1 标签JLabel

标签是用来在窗口中现实文字或图像的控件。

//filename:App13_4.java
import java.awt.*;
import javax.swing.*;
public class App13_4
{
	public static void main(String[] args)
	{
		JFrame jfrm=new JFrame("label class window");
		JLabel jlab=new JLabel("I'm a label",JLabel.CENTER);
		jfrm.setLayout(null);
		jfrm.setSize(300,200);
		Container c=jfrm.getContentPane();
		c.setBackground(Color.PINK);
		jlab.setOpaque(true);
		jlab.setBackground(Color.YELLOW);
		jlab.setForeground(Color.RED);
		jlab.setLocation(80,60);
		jlab.setSize(130,30);
		jlab.setToolTipText("I'm set to opaque.");
		Font fnt=new Font("Serief",Font.BOLD+Font.ITALIC,20);
		jlab.setFont(fnt);
		jfrm.add(jlab);
		jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jfrm.setVisible(true);
	}
}

13.3.2  命令按钮JButton、复选框JCheckBox和单选按钮JRadioButton

1. 命令按钮JButton

命令按钮是窗口程序设计中最常用的控件之一,用户可以用鼠标单击来控制程序运行的流程。

//filename:App13_5.java
import javax.swing.*;
public class App13_5 extends JFrame
{
	public static void main(String[] args)
	{
		App13_5 jfrm=new App13_5();
		jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ImageIcon ic=new ImageIcon("github.ico");
		JButton btn=new JButton("github",ic);
		jfrm.setLayout(null);
		jfrm.setSize(200,180);
		jfrm.setTitle("button class window");
		btn.setBounds(50,45,100,40);
		btn.setToolTipText("I'm a button");
		jfrm.add(btn);
		jfrm.setVisible(true);
	}
}

2.复选框JCheckBox和单选按钮JRadioButton

复选框和单选框按钮是让用户选取项目的一种组件,用户利用该组件来获得相应的输入。它具有状态属性,用户可以通过鼠标单击操作来设置其状态为选中或非选中。

13.3.3 文本编辑组件 JTextField、JPasswordField、JTextArea与滚动窗格JScrollPane

文本编辑组件时可以接收用户的文本输入并具有一定编辑功能的界面元素。这些编辑功能包括修改、删除、复制、粘贴等。文本编辑组件分为三种:第一种时单行文本编辑组件,简称文本行,也称文本框,时通过JTextField类实现;第二种是密码文本行组件,是通过JPasswordField类实现的;第三种是多行文本编辑组件,简称文本区。

1.文本行组件JTextField

文本行组件习惯上也称为文本框,是一个能够接收用户键盘输入的文本编辑组件。

Java语言用TextField类来创建文本框。

2.密码文本行组件JPasswordField

密码文本行组件JPasswordField类的构造方法与JTextField的构造方法相同,只是密码文本行类的构造方法名为JPasswordField。

3.文本区组件JTextArea与滚动窗格JScrollPane

//filename:App13__7.java
import javax.swing.*;
public class App13_7 extends JFrame
{
	JTextField jtf=new JTextField("The text box is not editable",30);
	static JPasswordField jpf=new JPasswordField("astronaut 3",30);
	public App13_7(String str)
	{
		super(str);
		jtf.setBounds(20,40,140,20);
		jtf.setEditable(false);
		add(jtf);
	}
	public static void main(String[] args)
	{
		App13_7 frm=new App13_7("Text editing function window");
		JTextArea jta=new JTextArea("hello",10,30);
		JScrollPane jsp=new JScrollPane(jta);
		frm.setLocation(200,150);
		frm.setSize(240,220);
		frm.setLayout(null);
		jsp.setBounds(20,70,160,100);
		jpf.setBounds(20,10,140,20);
		frm.add(jpf);
		frm.add(jsp);
		char[] password=jpf.getPassword();
		String str=new String(password);
		System.out.println("Today's password is: "+password+" convert it to str shows:"+str);
		frm.setVisible(true);
		frm.setResizable(false);
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

13.3.4  选项卡窗格JTabbedPane

选项卡窗格在Swing中是由JTabbedPane类实现,选项卡窗格中允许包含有多个选项卡,可以把多个组件放在多个不同选项卡中,从个人使页面不致拥挤,其选项卡的形式也能为程序增色不少。

用户只需要点击每个选项卡的标题,就可以切换到不同的选项卡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流鱼a_ec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值