day23 GUI.docx

上传人:b****6 文档编号:5617120 上传时间:2022-12-29 格式:DOCX 页数:42 大小:184.25KB
下载 相关 举报
day23 GUI.docx_第1页
第1页 / 共42页
day23 GUI.docx_第2页
第2页 / 共42页
day23 GUI.docx_第3页
第3页 / 共42页
day23 GUI.docx_第4页
第4页 / 共42页
day23 GUI.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

day23 GUI.docx

《day23 GUI.docx》由会员分享,可在线阅读,更多相关《day23 GUI.docx(42页珍藏版)》请在冰豆网上搜索。

day23 GUI.docx

day23GUI

1.GUI编程引言

以前的学习当中,我们都使用的是命令交互方式:

例如:

在DOS命令行中通过javacjava命令启动程序.

软件的交互的方式:

1.命令交互方式

图书管理系统

2.图形交互方式

Java提供了专业的API用于开发图形用户界面

GUI-->GraphicUserInterface

将要了解GUIAPI的框架结构,以及GUI组件以及组件之间的关系,容器和布局管理器,颜色,字体等.

2.GUI的分类

2.1.AWT

Java1.0版本的图形用户界面库,设计目标是帮助程序员编写在所有平台上都能良好表现的GUI程序。

为了实现这个目标Java1.0提供了抽象窗口工具集(AWT),但是这个目标并没有达到。

AWT在所有的系统上表现都不好。

因为:

最初版本的AWT是在一个月内构思,设计和实现的(ThinkinJava)。

AbstractWindowToolkit抽象窗口工具集

Java将图形用户界面相关的类捆绑在了一起,放在了一个称之为抽象窗口工具集的库中.AWT适合开发简单的图形用户界面,并不适合开发复杂的GUI项目.

位于:

java.awt.*中,定义了很多的组件类,开发者可以直接创建对象加以使用

缺点:

所有的图形界面都依赖于底层的操作系统,容易发生于特定平台相关的故障.

AWT调用本地系统资源生成图形化界面,依赖本地平台.1.0

 

2.2.Swing

SUN公司对AWT进行了升级,基于AWT,推出了一种更稳定,更通用和更灵活的库.称之为Swing组件库(Swingcomponent)。

既然都是用于GUI设计的组件库,那么为了区分Swing组件类和对应的AWT组件类,Swing组件类都已字母J为前缀.位于:

javax.swing.*中,提供了和AWT中等同的所有的组件类,但是类名的前面多加了一个J.

SWING可以跨平台.1.2

我们主要学习SwingGUI组件.

3.JavaGUIAPI

GUIAPI包含的类分为三个部分:

组件类(componentclass)容器类(containerclass),和辅助类(helperclass)

1.组件类是用来创建用户图形界面的,例如JButton,JLabel,JTextField.

2.容器类是用来包含其他组件的,例如JFrame,JPanel

3.辅助类是用来支持GUI组件的,例如Color,Font

3.1.组件类

在图形用户界面程序中当我们想要创建按钮、复选框和滚动条等这些可以显示在屏幕上的对象,该如何创建。

其实这些都属于一类叫做组件类。

AWT中的组件根类

类Component

java.lang.Object

java.awt.Component

Swing中的组件根类

javax.swing

类JComponent

java.lang.Object

java.awt.Component

java.awt.Container

javax.swing.JComponent

组件类的实例可以显示在屏幕上.Component类是包括容器类的所有用户界面类的根类是java.awt中的类,对应的Swing中的是Jcomponent.了解了Component和JComponent都是抽象类.所以不能使用new关键字创建对象.所以需要使用它们的具体的实现类来创建对象.

在AWT中典型图形用户界面中的按钮(Button)、复选框(Checkbox)和滚动条(Scrollbar)都是组件类,都是Component类的子类.

在Swing中的GUI组件,有对应的JButton,JCheckBox,JscrollBar

继承关系图(AWT)

3.2.容器类

容器(Container),是一个特殊的组件,该组件可以通过add()添加其他组件。

容器类适用于盛装其他GUI组件的GUI组件.例如PanelFrameDialog都是AWT组件的容器类.对应的Swing组件的容器类是JPanelJFrameJDialog

3.3.GUI辅助类

用来描述GUI组件的属性,例如图像的颜色,字体等.注意:

辅助类是在java.awt中的

3.4.GUI运行原理

在JDK的bin目录中有javaw.exe.javaw.exe是java在window中专门用于执行GUI程序.

4.体验GUI

importjavax.swing.JFrame;

importjavax.swing.JOptionPane;

publicclassDemo{

publicstaticvoidmain(String[]args){

//创建JFrame

JFrameframe=newJFrame("hello,world");

//设置尺寸

frame.setSize(200,100);

//JFrame在屏幕居中

frame.setLocationRelativeTo(null);

//JFrame关闭时的操作

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示JFrame

frame.setVisible(true);

}

}

5.Jframe框架

JFrame(框架)是一个容器

创建一个用户界面需要创建一个JFrame来存放用户界面组件.例如存放按钮,文本框。

javax.swing

类JFrame

java.lang.Object

java.awt.Component

java.awt.Container

java.awt.Window

java.awt.Frame

javax.swing.JFrame

5.1.创建一个框架

publicclassDemo1{

publicstaticvoidmain(String[]args){

//创建JFrame

JFrameframe=newJFrame("我的frame");

//显示JFrame

frame.setVisible(true);

}

}

注意:

需要调用setVisible(true)方法后才会显示框架

运行程序会在窗口的左上角显示一个窗口,但是只能显示标题栏,而且关闭JFrame时,程序程序没有停止.

所以需要完成如下需求:

1:

设置Jframe的宽度和高度

2:

让Jframe显示在屏幕中间

3:

关闭Jframe时,程序会停止

5.1.1.设置JFrame的宽度和高度

java.awt.Window.setSize(intwidth,intheight)

查找API文档,查看setSize方法,可以指定框架的宽度和高度.参数类型是int,注意是以像素为单位,普通的笔记本的屏幕分辨率为1280*800或者1366*768.注意:

分辨率表示每平方英寸的像素数.屏幕分辨率越高,屏幕的像素越多.所以分辨率越高看到的细节就越多.

setSize方法被定义在java.awt.Component类中,被Component的子类java.awt.Window重写.而Jframe以继承了Windiws类所以也具备该方法.

5.1.2.JFrame显示在屏幕中间

setLocationRelativeTo()方法

java.awt.Window.setLocationRelativeTo(Componentc)

设置窗口相对于指定组件的位置。

如果c为null,则此窗口将置于屏幕的中央。

setLocationRelativeTo(null)方法可以在屏幕上居中显示框架.

如果不想要设置在中间,可以使用

setLocation(200,100);

5.1.3.关闭JFrame程序停止

setDefaultCloseOperation(intoperation)方法

javax.swing.JFrame.setDefaultCloseOperation(intoperation)

该方法告诉程序,当框架关闭时结束程序.方法的参数是JFrame的常量EXIT_ON_CLOSE

添加完毕

publicclassDemo1{

publicstaticvoidmain(String[]args){

//创建JFrame

JFrameframe=newJFrame("我的frame");

//设置尺寸

frame.setSize(200,100);

//JFrame在屏幕居中

frame.setLocationRelativeTo(null);

//JFrame关闭时的操作

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示JFrame

frame.setVisible(true);

}

}

5.2.框架中添加组件

上述案例中的框架是空的.可以通过add方法在框架中添加组件

java.awt.Container.add(Componentcomp)

代码:

publicstaticvoidmain(String[]args){

//创建JFrame

JFrameframe=newJFrame("我的frame");

//创建按钮

JButtonbutton=newJButton("OK");

//向frame中添加一个按钮

frame.add(button);

//设置尺寸

frame.setSize(200,100);

//JFrame在屏幕居中

frame.setLocationRelativeTo(null);

//JFrame关闭时的操作

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//显示JFrame

frame.setVisible(true);

}

运行程序,会显示上图所示窗口.调整窗口的大小,按钮都是显示在窗口的中央,并且占满整个框架.这是因为组件(本例就是按钮)是被布局管理器放到框架中的.默认布局管理器就是将按钮放到中央.

备注:

可以通过f.setVisible(false);隐藏窗体f.dispose();关闭窗口

设置图片:

setIconImage(Toolkit.getDefaultToolkit().createImage("png-0015.png"));

6.JoptionPane对话框

显示一个带有OK 按钮的模态对话框。

下面是几个使用showMessageDialog 的例子:

Java代码  

JOptionPane.showMessageDialog(null,"错误信息提示","标题",JOptionPane.INFORMATION_MESSAGE); 效果如下:

Java代码  

1.JOptionPane.showMessageDialog(jPanel, "提示消息", "标题",JOptionPane.WARNING_MESSAGE);  

 效果如下:

Java代码  

1.JOptionPane.showMessageDialog(null, "提示消息.", "标题",JOptionPane.ERROR_MESSAGE);  

 

 

Java代码  

1.JOptionPane.showMessageDialog(null, "提示消息.", "标题",JOptionPane.PLAIN_MESSAGE);  

 

 

1.2showOptionDialog

这个函数可以改变显示在按钮上的文字。

你还可以执行更多的个性化操作。

常规的消息框:

Java代码  

1.int n = JOptionPane.showConfirmDialog(null, "你高兴吗?

", "标题",JOptionPane.YES_NO_OPTION);//i=0/1  

 效果如下:

输入框:

StringinputValue=JOptionPane.showInputDialog("请输入你给我金额");

7.面板(Panel)

面板也是一个容器的组件,可以在上面添加

注意:

面板不能单独使用,必须在顶层窗口中使用。

8.常见组件

一些常用的组件例如:

JLabel,

JButton,

JTextField

JPassworldField

JRadioButton

JCheckBox

JTextArea

JList

JMenuBar

JMenu

JMenultem

8.1.Button按钮

Java中的Swing提供了常规按钮,单选按钮,复选按钮和菜单按钮

8.1.1.JButtion普通按钮

按钮Button是点击时触发动作事件的组件.

8.1.2.JRadioButton单选按钮

单选按钮,可以让用户从一组选项中选择一个单一条目.例如性别.

使用单选按钮时注意将,单选按钮放在一组,需要使用java.swing.ButtonGroup.的add方法,添加到一个组中,位于同一个组的单选按钮就是互斥的.如果没有将单选按钮放在一个组中,就是独立的..我们让然需要把按钮添加在容器中.因为ButtonGroup添加到容器中..

8.1.3.JCheckBox复选框

多选

8.2.JLabel标签

8.3.JTextField文本域

8.4.JTextArea文本区域

8.5.JComboBox组合框

8.6.JList列表框

例如:

String[]data={"one","two","three"};

JListlist=newJList(data);

p1.add(list);

8.7.JmenuBar菜单条

JMenu菜单

JMenultem菜单项

菜单条(MenuBar)中包含菜单(Menu),菜单中中包含菜单项(MenuItem)

注意添加的顺序。

例如:

记事本的菜单条中包含文件、编辑、格式、查看、帮助菜单。

其中文件菜单中包含新建、打开、保存、另存为等菜单项

案例综合。

publicclassCommonComponentextendsJFrame{

publicCommonComponent(){

//面板

JPanelp1=newJPanel();

add(p1);

//标签

JLabelname=newJLabel("用户名:

");

p1.add(name);

//文本域

JTextFieldfield=newJTextField(8);

p1.add(field);

//标签

JLabelpasswd=newJLabel("密码");

p1.add(passwd);

//密码域

JPasswordFieldpass=newJPasswordField(8);

p1.add(pass);

//单选按钮

JLabelgender=newJLabel("性别");

p1.add(gender);

JRadioButtonmale=newJRadioButton("男");

JRadioButtonfemale=newJRadioButton("女");

//单选按钮组,同一个单选按钮组的互斥.

ButtonGroupgroup=newButtonGroup();

group.add(male);

group.add(female);

//注意,单选按钮组不能添加进容器

p1.add(male);

p1.add(female);

//复选框

JLabellike=newJLabel("爱好:

");

p1.add(like);

JCheckBoxeat=newJCheckBox("吃饭");

JCheckBoxmovie=newJCheckBox("看电影");

JCheckBoxsleep=newJCheckBox("睡觉");

p1.add(eat);

p1.add(movie);

p1.add(sleep);

//文本域

JLabelinfo=newJLabel("个人简介");

p1.add(info);

JTextAreaarea=newJTextArea(20,20);

p1.add(area);

//列表

String[]data={"one","two","three"};

JListlist=newJList(data);

p1.add(list);

//普通按钮

JButtonbutton=newJButton("注册");

p1.add(button);

//菜单条

JMenuBarbar=newJMenuBar();

//菜单

JMenumenu=newJMenu("文件");

//菜单选项

JMenuItemmyNew=newJMenuItem("新建");

JMenuItemmyOpen=newJMenuItem("打开");

bar.add(menu);

menu.add(myNew);

menu.add(myOpen);

add(bar,BorderLayout.NORTH);

}

publicstaticvoidmain(String[]args){

CommonComponentframe=newCommonComponent();

frame.setTitle("常用组件");

frame.setSize(400,400);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//自适应

frame.pack();

frame.setVisible(true);

}

}

样式如下:

因为面板默认是流式布局.

9.布局管理器

Java的GUI组件都放置在容器中,他们的位置是由容器的布局管理器来管理的.在前面的程序中,并没有指定将OK按钮放置在框架的什么位置,但是,Java知道应该把它放置在哪里,因为在后台工作的布局管理器能够将组件放到正确的位置.布局管理器是使用布局管理器类创建的.

我们可以使用setLayout()方法在容器中设置布局管理器.

我们将要了解FlowLayoutGridLayoutBorderLayout

9.1.FlowLayout流式布局

FlowLayout(流式布局)是最简单布局管理器.Jpanel容器默认的布局管理器

流式布局,按照组件添加的顺序,从左到到右将组件排列在容器中.当放满一行,就开始新的一行.在FlowLayout有3个常量FlowLayout可以指定组件的对齐方式.

LEFT每一行组件都应该是左对齐的

RIGHT每一行组件都应该是右对齐的

CENTER每一行组件都应该是居中的

还可以指定组件之间的以像素为单位的间隔.

intgetHgap()

获取组件之间以及组件与Container的边之间的水平间隙。

intgetVgap()

获取组件之间以及组件与Container的边之间的垂直间隙。

voidsetHgap(inthgap)

设置组件之间以及组件与Container的边之间的水平间隙。

voidsetVgap(intvgap)

设置组件之间以及组件与Container的边之间的垂直间隙。

这个布局管理器的对其方式默认值是CENTER

这个布局管理器的水平间隔默认值是5个像素

这个布局管理器的垂直间隔默认是是5个像素

创建该布局管理器

FlowLayout()

构造一个新的FlowLayout,它是居中对齐的,默认的水平和垂直间隙是5个单位。

FlowLayout(intalign)

构造一个新的FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是5个单位。

FlowLayout(intalign,inthgap,intvgap)

创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。

案例:

创建框架,使用流失布局管理器.向该框架添加三个标签和文本域.

publicclassShowFlowLayoutextendsJFrame{

publicShowFlowLayout(){

super.setLayout(newFlowLayout(FlowLayout.LEFT,10,20));

add(newJLabel("姓名:

"));

add(newJTextField(8));

add(newJLabel("邮箱:

"));

add(newJTextField(8));

add(newJLabel("电话:

"));

add(newJTextField(8));

}

publicstaticvoidmain(String[]args){

ShowFlowLayoutframe=newShowFlowLayout();

frame.setTitle("FlowLayout");

frame.setSize(500,200);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

该案例在本类main方法中创建了一个本类对象.该类的构造函数中创建并且添加组件.

该案例使用了FlowLayout管理器在框架放置组件.如果改变框架的大小.组建会自动的重新排列,以适应框架.

例如:

如果将同一个按钮在框架中添加10次,那么该框架只会出现一次,将一个按钮向容器中添加多以和一次是一样的.

 

9.2.GridLayout网格布局

GridLyaout是以网格形式管理组件的.组件按照他们添加的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1