《Java程序设计》课件-项目六:图形用户界面(GUI)设计_第1页
《Java程序设计》课件-项目六:图形用户界面(GUI)设计_第2页
《Java程序设计》课件-项目六:图形用户界面(GUI)设计_第3页
《Java程序设计》课件-项目六:图形用户界面(GUI)设计_第4页
《Java程序设计》课件-项目六:图形用户界面(GUI)设计_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GUI基本组件GUI的全称是GraphicalUserInterface,即图形用户界面。顾名思义,GUI就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮等各种图形界面元素。针对GUI设计,Java提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称AWT和Swing。Java使用AWT和Swing包下面的类完成图形用户界面的编程。

什么是GUIAWT是Sun公司最早提供的GUI库,这个GUI库提供了一些基本功能,但是它提供的一些类在使用时比较繁琐,提供的功能也比较局限,后来又提供了一套类库,即Swing包下的库。通过使用AWT和Swing提供的图形用户界面组件库可以完美地编写出图形用户界面,在程序中只要依次创建所需要的图形组件,并以合适的方式将这些组件组织在一起就可以开发出完美的用户界面。使用AWT创建的图形用户界面和所在的操作系统平台有相同的界面风格,比如在Windows操作系统上,它表现出windows风格,在Linux操作系统上,表现出Linux风格。由于用AWT开发的图形用户界面过于依赖操作系统平台且功能有限,所以Sun公司随后提供的Swing替代了大部分AWT组件,但Swing不是完全替代了AWT组件,而是在AWT基础上的补充和加强。Swing组件分为基本组件和容器。基本组件是图形用户界面的最小单位,存放在顶级容器或中间容器中,基本组件中不能再包含其他组件。如按钮、文本框、复选框、静态标签等。容器是一种特殊的组件,它可以将多个组件组合在一起,即容器中可以包含容器,也可以包含基本组件。容器又分为顶级容器和中间容器,顶级容器是指图形用户界面最外层的容器,如窗口、对话框。中间容器指存放在顶级容器或中间容器中的一种容器,如面板。Swing组件的层次结构图Swing顶级容器顶级容器是指用于容纳其他容器的容器组件,顶级容器不能被放置在其他容器之中。Swing顶级容器JFrameJDialogJAppletJFrame也称为窗口或窗体。JFrame类位于javax.swing包中,创建窗体时需要先将JFrame包导入到程序中。

JFrameJFrame类支持通用窗口的所有基本功能:设置窗口的尺寸和位置。指定窗口标题等。JFrame自带窗口的最大化、最小化和关闭按钮。JFrame():创建不带标题的普通窗口。JFrame(Stringtitle):创建指定标题的窗口。setSize(intwidth,intheight):设置窗口的尺寸。width为窗口的宽度,height为窗口的高度。setLocation(intx,inty):设置窗口的显示位置,该位置为窗口左上角的位置,x为窗口左上角的点的水平坐标轴,y为窗口左上角的点的垂直坐标轴。如果不设置窗口的显示位置,则窗口默认显示在屏幕的左上角位置,即setLocation(0,0)的位置。setVisiable(booleanb):用于设置窗口显示或隐藏,参数的值为true,表示显示窗口。为false表示隐藏窗口。add(Componentcomponent):将组件component添加到窗口。setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):设置窗口的默认关闭方式。JFrame的常用方法importjavax.swing.JFrame;publicclassJFramedemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame();

frame.setTitle("JFrame窗口");

frame.setSize(350,200);

frame.setLocation(300,200);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);}}JDialog也称为对话框。用于实现与用户的信息交互。JDialog对话框可分为模态对话框和非模态对话框两种。

JDialog模态对话框是指用户需要等到处理完当前对话框后才能继续与其他窗口交互的对话框。非模态对话框是指允许用户在处理当前对话框的同时与其他窗口交互的对话框。设置对话框为模态或者非模态的方法:创建JDialog对象时为构造方法传入参数进行设置。创建JDialog对象后调用它的setModal()方法进行设置。JDialog(Frameowner):创建一个非模态对话框,owner为对话框所有者(顶级容器JFrame)。JDialog(Frameowner,Stringtitle):创建一个具有指定标题和指定Frame所有者的非模态对话框。JDialog(Frameowner,booleanmodal):创建一个具有指定模式和指定Frame所有者的对话框,参数modal的值为true表示模态,为false表示非模态。JDialog(Frameowner,Stringtitle,booleanmodal):创建一个具有指定标题、指定模式和指定Frame所有者的对话框。setModal(booleanmodal):设置对话框是模态或非模态。JDialog的常用方法importjavax.swing.JFrame;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JLabel;importjavax.swing.SwingConstants;importjava.awt.event.ActionListener;importjava.awt.event.ActionEvent;publicclassJDialogdemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");

frame.setSize(300,250);

frame.setLocation(300,200);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JButtonbutton1=newJButton("加入学习");

frame.add(button1);

frame.setVisible(true);

JDialogdialog=newJDialog(frame,"JDialog对话框",false);

dialog.setSize(220,150);

dialog.setLocation(350,250);JLabellabel=newJLabel("欢迎进入Java课堂!");label.setHorizontalAlignment(SwingConstants.CENTER);

dialog.add(label);

button1.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){dialog.setVisible(true);}});}}

BorderLayout布局管理器BorderLayout布局管理器也称边界布局管理器,它将容器划分为东、西、南、北、中五个区域。组件可以被添加到五个区域中的任意一个区域。添加组件时必须通过add(Componentcomp,BorderLayout.constant)方法将组件添加到容器的指定区域,否则,组件是不可见的。BorderLayout的常量:通常可以用常量EAST(东)、WEST(西)、SOUTH(南)、NORTH(北)、CENTER(中)或常量PAGE_START(页头)、PAGE_END(页尾)、LINE_START(行首)、LINE_END(行尾)和CENTER(中)来指定组件在容器中的位置。BorderLayout常用的构造方法:BorderLayout():创建一个没有间距的边界布局管理器。BorderLayout(inthgap,intvgap):创建一个指定水平和垂直间距的边界布局管理器。BorderLayout的布局效果:北

NORTH/PAGE_START西WEST/LINE_START中CENTER东EAST/LINE_END南NORTH/PAGE_END注意事项:(1)向BorderLayout管理的容器添加组件时,如果不指定添加到哪个区域,则默认添加到CENTER区域。(2)一个区域只能放置一个组件,如果向一个区域添加多个组件,那么后加入的组件会覆盖先加入的组件。importjavax.swing.JFrame;importjava.awt.BorderLayout;importjavax.swing.JButton;publicclassBorderLayoutdemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setSize(280,250);frame.setLayout(newBorderLayout(3,3));JButtonbutton1=newJButton(“按钮1");JButtonbutton2=newJButton(“按钮2");JButtonbutton3=newJButton(“按钮3");JButtonbutton4=newJButton(“按钮4");JButtonbutton5=newJButton(“按钮5");

frame.add(button1,BorderLayout.NORTH);frame.add(button2,BorderLayout.WEST);frame.add(button3,BorderLayout.CENTER);frame.add(button4,BorderLayout.EAST);frame.add(button5,BorderLayout.SOUTH);

frame.setVisible(true);}}

JFrameframe=newJFrame("JFrame窗口");frame.setSize(280,250);frame.setLayout(newBorderLayout(3,3));JButtonbutton1=newJButton(“按钮1");JButtonbutton2=newJButton(“按钮2");JButtonbutton3=newJButton(“按钮3");JButtonbutton4=newJButton(“按钮4");JButtonbutton5=newJButton(“按钮5");

frame.add(button1,BorderLayout.PAGE_START);frame.add(button2,BorderLayout.LINE_START);frame.add(button3,BorderLayout.CENTER);frame.add(button4,BorderLayout.LINE_END);frame.add(button5,BorderLayout.PAGE_END);

frame.setVisible(true);}}GridLayout布局管理器GridLayout布局管理器也称网格布局管理器,它是一种通过将整个容器划分成N行M列的矩形网格来管理容器中的组件的一种布局管理器。使用GridLayout划分出来的网格大小相同,每个网格可以放置一个组件。组件添加到容器时,按照加入到容器的顺序将第一个组件放置在第一行的第一个单元格,然后按从左向右的顺序依次放置其他组件,当一行放满后,继续将组件按从左向右的顺序放置到下一行中。GridLayout管理组件的方式与FlowLayout类似。不同的是,使用GridLayout管理的组件将自动占据网格的整个区域。GridLayout():创建一个默认只有一行且每个组件占一列的网格布局管理器。GridLayout(introws,intcols):创建一个指定行数为rows、列数为cols的网格布局管理器。GridLayout(introws,intcols,inthgap,intvgap):创建一个指定容器行数为rows、列数为cols,组件间的水平间距为hgap、垂直间距为vgap的网格布局管理器。GridLayout的构造方法importjavax.swing.JFrame;importjava.awt.GridLayout;importjavax.swing.JButton;publicclassGridLayoutdemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setSize(300,300);frame.setLocation(400,300);frame.setLayout(newGridLayout(3,3));

for(inti=1;i<=9;i++){JButtonbutton=newJButton("button"+i);frame.add(button);

}frame.setVisible(true);}}GridBagLayout布局管理器GridBagLayout布局管理器是一种最灵活也是最复杂的布局管理器,它与GridLayout类似,也是使用网络管理容器中的组件。GridBagLayout允许网格中的组件大小各不相同且一个组件可跨越一个或者多个网格,组件之间也可以相互部分重叠,这是GridBagLayout的灵活性的表现。GridBagLayout的复杂性表现在它不能直接指定组件在容器中的位置和大小。组件在容器中的位置、大小和对齐方式由网格包约束类(GridBagConstraints)的相关属性,也称布局约束条件进行设置。组件与布局约束条件之间的关联由GridBagConstraints类的setConstraints(Componentcomp,GridBagConstraintsconstraints)方法设置。使用GridBagLayout布局管理器的步骤:1.创建GridBagLayout布局管理器layout,设置容器container使用该布局管理器。语法格式为:GridBagLayoutlayout=newGridBagLayout();container.setLayout(layout);2.创建GridBagConstraints对象c,并设置该对象的相关属性。语法格式为:GridBagConstraintsc=newGridBagConstraints();c.gridx=1;//组件在第1行。c.gridy=1;//组件在第1列。c.gridwidth=1;//组件横向跨越1个网格。c.gridheight=1;//组件纵向跨越1个网格。3.调用GridBagLayout对象的setConstraints()方法,建立GridBagConstraints对象与受控组件之间的关联。语法格式为:layout.setConstraints(component,constraints);4.向容器container中添加组件component。语法格式为:container.add(component);GridBagConstraints对象可以重复使用。如果要改变组件的布局,只需要改变GridBagConstraints对象的属性即可。如果要向容器中添加多个组件,则重复步骤2至3即可。使用GridBagLayout布局管理器的关键在于GridBagConstraints对象。GridBagConstraints类才是控制容器中每个组件布局的核心类,在GridBagConstraints类中有很多用于设置约束条件的属性。属性功能Gridx/Gridy设置组件的位置,即组件所在的行和列。取值从0开始,比如Gridx=0,gridy=1表示组件在容器的第一行第二列。值为GridBagConstraints.RELATIVE(默认值),表示组件紧跟在上一个组件的后面。Gridwidth/Gridheight设置组件跨越的行列数。默认值为1。值为GridBagConstraints.REMAINER表示组件在当前行或列上为最后一个组件。Weightx/Weighty设置窗口变大时,各组件跟着变大的比例。比如组件A的Weightx=0.5,组件B的Weightx=1,那么窗口X轴变大时剩余的空间就会以1:2的比例分配给组件A和B。Fill设置组件在所占用的网格空间中的填充方式。fill有4个值:NONE(默认值):不改变组件大小,HORIZONTAL:使组件在水平方向足够长以填充显示区域,但高度不变,VERTICAL:使组件在垂直方向足够高以填充显示区域,但长度不变,BOTH:使组件足够大,以填充整个显示区域。GridBagLayout常用属性importjavax.swing.JFrame;importjava.awt.GridBagLayout;importjava.awt.GridBagConstraints;importjavax.swing.JButton;publicclassGridBagLayoutdemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");GridBagLayoutlayout=newGridBagLayout();frame.setLayout(layout);

GridBagConstraintsc=newGridBagConstraints();c.fill=GridBagConstraints.BOTH;

JButtonbutton1=newJButton("button1");JButtonbutton2=newJButton("button2");JButtonbutton3=newJButton("button3");JButtonbutton4=newJButton("button4");JButtonbutton5=newJButton("button5");JButtonbutton6=newJButton("button6");JButtonbutton7=newJButton("button7");c.weightx=1;

c.gridwidth=GridBagConstraints.REMAINDER;

layout.setConstraints(button1,c);

frame.add(button1);

c.gridheight=1;

c.gridwidth=1;

layout.setConstraints(button2,c);

frame.add(button2);

layout.setConstraints(button3,c);

frame.add(button3);

c.gridwidth=GridBagConstraints.REMAINDER;

layout.setConstraints(button4,c);

frame.add(button4);

c.gridheight=2;

c.gridwidth=1;

layout.setConstraints(button5,c);

frame.add(button5);c.gridheight=1;

c.gridwidth=GridBagConstraints.REMAINDER;

layout.setConstraints(button6,c);

frame.add(button6);

layout.setConstraints(button7,c);

frame.add(button7);

frame.pack();

frame.setVisible(true);

}}

JPanel面板Swing的常用组件包括面板组件、标签组件、按钮组件、文本组件、下拉框组件、菜单组件等,这些组件位于javax.swing包。也称之为中间容器,中间容器不能单独存在,只能放置在顶级容器或中间容器中。Swing常用的面板组件有两种,分别是JPanel和JScrollPane。JPanel是一个无边框,不能被移动、放大、缩小和关闭的面板,其自身可以嵌套组合,JPanel中可以包含其他组件,如按钮、标签、文本框等。Panel类继承了JComponent类,因此具有JComponent类的所有属性和方法,并且还有JPanel特有的方法。方法功能描述add(Componentcomp)向面板中添加组件compadd(Componentcomp,Objectconstraints)向面板中添加组件comp并指定组件的布局约束setLayout(LayoutManagerlayout)设置面板的布局管理器为layoutremove(Componentcomp)从面板中移除comp组件removeAll()从面板中移除所有组件setBackground(Colorc)设置面板的背景颜色setPreferredSize(intwidth,intheight)设置面板的首选宽度和高度setSize(intwidth,intheight)设置面板的尺寸,宽为width,高为heightsetBounds(intx,inty,intwidth,intheight)设置容器的位置和尺寸,x和y表示容器左上角的点的水平坐标和垂直坐标。repaint()重绘面板及其所有子组件setOpaque(booleanisOpaque)设置面板是否透明Jpanel的常用方法importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.Color;importjavax.swing.JButton;publicclassJPaneldemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");

frame.setSize(320,200);

frame.setLocation(300,200);

JPanelpanel=newJPanel();

panel.setBackground(Color.YELLOW);

frame.add(panel);

panel.add(newJButton("按钮1"));panel.add(newJButton("按钮2"));panel.add(newJButton("按钮3"));panel.add(newJButton("按钮4"));

frame.setVisible(true);

}}Color是用来封装颜色的,支持多种颜色空间,默认为RGB颜色空间。Color类位于java.awt包。为组件添加颜色时,可以使用Color类提供的预定义颜色,如Color.YELLOW(黄色)、Color.RED(红色)、Color.ORANGE(橙色)。JScrollPane面板JScrollPane是一个带有滚动条的面板,面板上只能添加一个组件。如果想向JScrollPane面板中添加多个组件,应该先将多个组件添加到某个组件中(如JPanel面板),然后再将这个组件添加到JScrollPane中。方法功能描述setHorizontalScrollBarPolicy(intpolicy) 指定水平滚动条策略,即水平滚动条何时显示在滚动面板上setVerticalScrollBarPolicy(intpolicy)指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上setViewportView(Componentcomp)设置在滚动面板显示的组件JScrollPane的常用方法属性功能描述VERTICAL_SCROLLBAR_AS_NEEDED当填充的组件视图超过容器大小时,自动显示水平滚动条(即需要时显示)HORIZONTAL_SCROLLBAR_AS_NEEDED当填充的组件视图超过容器大小时,自动显示垂直滚动条(即需要时显示)VERTICAL_SCROLLBAR_ALWAYS始终显示水平滚动条HORIZONTAL_SCROLLBAR_ALWAYS始终显示垂直滚动条VERTICAL_SCROLLBAR_NEVER始终不显示水平滚动条HORIZONTAL_SCROLLBAR_NEVER始终不显示垂直滚动条ScrollPaneConstants的属性importjavax.swing.JFrame;importjavax.swing.JButton;importjavax.swing.JScrollPane;importjavax.swing.ScrollPaneConstants;importjavax.swing.JPanel;publicclassJScrollPanedemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setSize(300,200);frame.setLocation(300,200);

JScrollPanescrollpane=newJScrollPane();

scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);

frame.add(scrollpane);

JPanelpanel=newJPanel();

panel.add(newJButton("按钮1"));panel.add(newJButton("按钮2"));panel.add(newJButton("按钮3"));panel.add(newJButton("按钮4"));scrollpane.setViewportView(panel);

frame.setVisible(true);

}}JLabel标签标签组件是Swing中很常见的组件,它可以显示文本和图像。Swing常用的标签组件是JLabel。在标签中显示文字时,可以使用Color和Font的方法或属性对文字的颜色和样式进行设置。使用setForeground(Color.颜色常量)可以设置文字的颜色。使用setFont(newFont(Stringname,intstyle,intsize))可以设置文字的字体类型、样式和尺寸,Color类和Font类都是java.awt包中的类。Color与Font类在标签中显示图像时,需要使用ImageIcon或Image中的方法或属性对图像进行读取、修改、加载并显示图片。ImageIcon是一个图像图标类,主要作用是使用图片来绘制图标,该类位于javax.swing包。Image类是所有的图形图像类的超类,处理位于java.awt包中。ImageIcon与Image类ImageIcon类常用的方法是setImage(Imageimage)方法和getImage()方法,用于设置和获取图片。Image类中常用的方法是getScaledInstance(intwidth,intheight,inthints)方法,用于创建图像的缩放版本,返回一个新的image对象。width表示将图像缩放到的宽度,height表示将图像缩放到的高度。hints表示图像所使用的缩放算法的常量。常用的处理图片的方法常量功能描述SCALE_AREA_AVERAGING采用区域平均图像缩放算法SCALE_DEFAULT采用默认的图像缩放算法SCALE_FAST采用快速的图像缩放算法,此算法侧重速度,缩放的图像可

能不是很平滑SCALE_REPLICATE使用ReplicateScaleFilter类中包含的图像缩放算法SCALE_SMOOTH使用侧重平滑效果而不侧重速度的图像缩放算法hints的常量importjavax.swing.JFrame;importjava.awt.BorderLayout;importjavax.swing.JLabel;importjavax.swing.ImageIcon;importjava.awt.Image;importjavax.swing.JPanel;importjava.awt.Color;importjava.awt.Font;publicclassJLabeldemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");

frame.setLayout(newBorderLayout());frame.setSize(400,300);frame.setLocation(300,200);

JLabellabel1=newJLabel();

ImageIconicon=newImageIcon(“image/动物乐园.jpg");

Imageimg=icon.getImage();

img=img.getScaledInstance(400,230,Image.SCALE_DEFAULT);

icon.setImage(img);

label1.setIcon(icon);

JPanelpanel=newJPanel();JLabellabel2=newJLabel(“动物乐园");label2.setForeground(Color.BLACK);

label2.setFont(newFont("宋体",Font.PLAIN,20));

panel.add(label2);

frame.add(label1,BorderLayout.PAGE_START);

frame.add(panel,BorderLayout.PAGE_END);

frame.setVisible(true);

}}常用的图片引用方式有两种:程序所使用的图片与程序文件在同一个文件夹下,那么可以直接使用图片的文件名引用图片。将图片放入到名为image的文件夹中,然后将这个文件夹放入到项目所在的文件夹下。文本组件文本组件用于接收用户输入的信息。常用的文本组件是JTextField(文本框)和JTextArea(文本域)。文本组件都有一个共同的父类JTextComponent,因此文本组件继承了该类的方法。方法功能描述getText()返回文本组件中所有的文本内容getSelectedText()返回文本组件中选定的文本内容selectAll()在文本组件中选中所有内容setEditable()设置文本组件为可编辑或者不可编辑状态setText(Stringtext)设置文本组件的内容为textJTextComponent的常用方法JTextField称为文本框,它只能接收单行文本的输入。JTextField方法功能描述JTextField()创建一个空的文本框JTextFiled(intcolumns)创建一个指定列数为columns的文本框JTextField(Stringtext)创建一个显示内容为text字符串的文本框JTextField(Stringtext,intcolumns)创建一个显示内容为text字符串,列数为columns的文本框JTextField的常用构造方法JTextArea称为文本域,它能接收多行文本的输入。JTextArea方法功能描述JTextArea()创建一个空的文本域JTextArea(Stringtext)创建显示内容为text字符串的文本域JTextArea(introws,intcolumns)创建行数为rows列数为columns的空文本域JTextArea(Stringtext,introws,intcolumns)创建显示text字符串,行数为rows列数为columns的文本域JTextArea的常用构造方法importjavax.swing.JFrame;importjava.awt.BorderLayout;importjava.awt.Font;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;importjavax.swing.SwingConstants;publicclassTextFielddemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setLayout(newBorderLayout());frame.setSize(400,300);frame.setLocation(300,200);

JLabellabel1=newJLabel("学号");JLabellabel2=newJLabel("姓名");JLabellabel3=newJLabel(“请您输入个人简介:");

label1.setFont(newFont("宋体",Font.BOLD,15));label2.setFont(newFont("宋体",Font.BOLD,15));label3.setFont(newFont("宋体",Font.BOLD,15));label3.setHorizontalAlignment(SwingConstants.CENTER);

JTextFieldtextfield1=newJTextField(10);JTextFieldtextfield2=newJTextField(10);

JButtonbutton=newJButton("保存");

JTextAreatextarea=newJTextArea(11,34);

textarea.setEditable(true);JPanelpanel=newJPanel();panel.add(label1);panel.add(textfield1);panel.add(label2);panel.add(textfield2);panel.add(button);

JScrollPanescrollpane=newJScrollPane(textarea);frame.add(panel,BorderLayout.NORTH);frame.add(label3,BorderLayout.CENTER);frame.add(scrollpane,BorderLayout.SOUTH);

frame.setVisible(true);

}}JRadioButton单选按钮Swing常用的按钮组件有JButton按钮、JRadioButton单选按钮、JCheckBox复选框等。JButton的使用方法非常简单,在前面的案例中已经多次用到,这里就不再进行介绍了。JRadioButton称为单选按钮。单选按钮只能选中一个,当一个按钮被选中时,先前被选中的按钮就需要自动取消选中。JRadioButton组件本身并不具备这种功能,若想实现JRadioButton按钮之间的互斥,需要使用javax.swing.ButtonGroup类。ButtonGroup是一个不可见的组件,不需要将其添加到容器中显示。它在逻辑上表示一个单选按钮组,只需将多个JRadioButton按钮添加到同一个单选按钮组,就能实现JRadioButton按钮的单选功能。方法功能描述JRadioButton()创建一个没有文本信息、初始状态未被选中的单选按钮JRadioButton(Stringtext)创建一个带有文本信息、初始状态未被选定的单选按钮JRadioButton(Stringtext,booleanselected)创建一个具有文本信息,并指定初始状态为选中或未选中的单选按钮。JRadioButton常用构造方法importjava.awt.BorderLayout;importjava.awt.Font;importjavax.swing.ButtonGroup;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.JRadioButton;publicclassJRadioButtondemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setLayout(newBorderLayout());frame.setSize(300,200);frame.setLocation(300,200);

JLabellabel=newJLabel("请选择您的性别:",JLabel.CENTER);label.setFont(newFont("宋体",Font.BOLD,15));

JPanelpanel=newJPanel();ButtonGroupgroup=newButtonGroup();

JRadioButtonmale=newJRadioButton("男",true);JRadioButtonfemale=newJRadioButton("女");

group.add(male);group.add(female);

panel.add(male);panel.add(female);

frame.add(label,BorderLayout.NORTH);frame.add(panel,BorderLayout.CENTER);frame.setVisible(true);

}}JCheckBox复选框JCheckBox称为复选框组件,它有选中和未选中两种状态。通常复选框会有多个,用户可以选中其中一个或者多个。方法功能描述JCheckBox()创建一个没有文本信息,初始状态未被选中的复选框。JCheckBox(Stringtext)创建一个带有文本信息,初始状态未被选中的复选框。JCheckBox(Stringtext,booleanselected)创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框。JCheckBox常用构造方法importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Font;importjavax.swing.JCheckBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassJCheckBoxdemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("JFrame窗口");frame.setLayout(newBorderLayout());frame.setSize(300,200);frame.setLocation(300,200);JLabellabel=newJLabel("请选择字体样式:",JLabel.CENTER);label.setFont(newFont("宋体",Font.PLAIN,15));

label.setForeground(Color.RED);

JPanelpanel=newJPanel();

JCheckBoxitalic=newJCheckBox("斜体");JCheckBoxbold=newJCheckBox("粗体");JCheckBoxplain=newJCheckBox("常规");panel.add(italic);panel.add(bold);panel.add(plain);

frame.add(label,BorderLayout.NORTH);frame.add(panel,BorderLayout.CENTER);frame.setVisible(true);

}}

下拉式菜单下拉式菜单也称为下拉菜单,通过下拉列表展示多个内容选项,用户能从预定的列表中选择一项或多项。Swing提供了用于创建下拉式菜单的三个组件,分别是JMenuBar、JMenu和JMenuItem。JMenuBar表示一个水平的菜单栏,用来管理一组菜单。使用构造方法JMenuBar()可以创建菜单栏。通常情况下,使用setJMenuBar()方法将菜单栏放置在顶级容器的顶部。JMenuBarJMenu表示一个菜单,用来整合管理菜单项。使用构造方法JMenu(Stringtext)可以创建具有指定文本内容的菜单。菜单可以是单一层次的结构,也可以是多层次的结构。JMenuJMenuItem表示一个菜单项,它是下拉式菜单系统中最基本的组件。使用构造方法JMenumItem(Stringtext)可以创建一个具有指定文本内容的菜单项。JMenuItem使用add()方法可以将菜单添加到菜单栏,或将菜单项添加到菜单。importjavax.swing.JFrame;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;publicclassPulldownmenudemo{

publicstaticvoidmain(String[]args){

JFrameframe=newJFrame("无标题-记事本");frame.setSize(350,250);frame.setLocation(300,200);

JMenuBarmenuBar=newJMenuBar();frame.setJMenuBar(menuBar);JMenumenu1=newJMenu("文件(F)");JMenumenu2=newJMenu("编辑(E)");JMenumenu3=newJMenu("格式(O)");JMenumenu4=newJMenu("查看(V)");JMenumenu5=newJMenu("帮助(H)");

menuBar.add(menu1);menuBar.add(menu2);menuBar.add(menu3);menuBar.add(menu4);menuBar.add(menu5);

JMenuItemitem1=newJMenuItem("新建(N)Ctrl+N");JMenuItemitem2=newJMenuItem("打开(O)...Ctrl+O");JMenuItemitem3=newJMenuItem("保存(S)Ctrl+S");JMenuItemitem4=newJMenuItem("退出(X)");

menu1.add(item1);menu1.addSeparator();

menu1.add(item2);menu1.addSeparator();

menu1.add(item3);menu1.addSeparator();

menu1.add(item4);

frame.setVisible(true);}}弹出式菜单弹出式菜单也称为快捷菜单,当鼠标单击某个对象或容器的空白位置时弹出的菜单就是弹出式菜单。在Swing组件中,弹出式菜单可以用JPopupMenu实现。弹出式菜单和下拉式菜单一样,都可以使用add()方法添加菜单项到菜单,但弹出式菜单默认是不可见的,如果想要将其显示出来,必须调用它的show(Componentcomponent,intx,inty)方法。show()方法中的参数component用于显示JPopupMenu菜单的参考组件,x和y表示组件component的坐标,即以JPopupMenu菜单左上角为原点的坐标。JPopupMenuimportjavax.swing.JFrame;importjavax.swing.JMenuItem;importjavax.swing.JPopupMenu;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;publicclassJPopupMenudemo{

publicstaticvoidmain(String[]args){JFrameframe=newJFrame("JFrame窗口");frame.setSize(300,200);frame.setLocation(300,200);

JPopupMenupopupMenu=newJPopupMenu();

JMenuItemitem1=newJMenuItem("复制");JMenuItemitem2=newJMenuItem("粘贴");

popupMenu.add(item1);

popupMenu.addSeparator();

popupMenu.add(item2);

frame.addMouseListener(newMouseAdapter(){publicvoidmouseClicked(MouseEvente){

if(e.getButton()==MouseEvent.BUTTON3){popupMenu.show(e.getComponent(),e.getX(),e.getY());}}});

frame.setVisible(true);}}BUTTON3表示单击鼠标右键,单击鼠标左键用BUTTON1,单击鼠标中键用BUTTON2,鼠标中键也叫鼠标滚轮。事件处理机制Swing组件中的事件处理是指响应用户的操作,例如,响应用户的鼠标单击、按下键盘或关闭窗口等操作。Swing事件处理主要涉及三类对象:事件源(EventSource)事件对象(Event)监听器(Listener)事件源通常指一个组件,如窗口、按钮、菜单、文本框等。事件对象指组件上发生的一次用户操作。监听器负责监听组件上发生的事件,并对事件做出相应处理,监听器对象中包含事件处理器。如果事件源注册了监听器,则触发的相应事件将会被处理。1.创建事件源:除了一些常见的组件如按钮、文本框等可以作为事件源外,JFrame窗口在内的顶级容器也可以作为事件源。2.自定义事件监听器:根据要监听的事件源创建指定类型的监听器进行事件处理。监听器是一个特殊的Java类,必须实现XxxListener接口。根据组件触发的动作进行区分。例如,WindowListener用于监听窗体事件,MouseListener用于监听鼠标事件,KeyListener用于监听键盘事件,ActionListener用于监听动作事件。事件处理步骤3.为事件源注册监听器:使用addXxxListener()方法为指定事件源添加特定类型的监听器。例如,使用addWindowListener()方法为事件源添加窗体事件监听器,使用addMouseListener()方法为事件源添加鼠标事件监听器。当事件源上发生监听事件后,就会触发绑定的事件监听器,由监听器中的方法对事件进行相应处理。例如,使用addWindowListener()方法为事件源添加窗体事件监听器,使用addMouseListener()方法为事件源添加鼠标事件监听器。窗体事件Swing提供了丰富的事件,如窗体事件、鼠标事件、键盘事件、动作事件等。大部分GUI应用程序都需要使用Window窗体对象作为最外层的容器,可以说窗体对象是所有GUI应用程序的基础,应用程序中通常都是将其他组件直接或者间接地添加到窗体中。Swing常用事件窗体事件是指对窗体进行的操作,如打开、关闭、最大化、最小化。Java使用WindowEvent类描述窗体事件。在应用程序中,如果要对窗体事件进行处理,需要先定义一个实现WindowListener接口的类作为窗体监听器,然后调用addWindowListener()方法将监听器绑定到窗体对象。WindowEvent类和WindowListener接口均位于java.awt.event包。窗体事件importjava.awt.event.WindowEvent;importjava.awt.event.WindowListener;importjavax.swing.JFrame;publicclassWindowEventdemo{

publicstaticvoidmain(String[]args){JFrameframe=newJFrame("JFrame窗口");frame.setSize(400,300);frame.setLocation(300,200);frame.setVisible(true);

frame.addWindowListener(newWindowListener(){

publicvoidwindowOpened(WindowEvente){System.out.println("窗体打开");}

publicvoidwindowIconified(WindowEvente){System.out.println("窗体最小化");}publicvoidwindowDeiconified(WindowEvente){System.out.println("取消窗体最小化");}publicvoidwindowActivated(WindowEvente){System.out.println("窗体最大化");}publicvoidwindowClosing(WindowEvente){System.out.println("窗体正在关闭");}publicvoidwindowClosed(WindowEvente){System.out.println("窗体已关闭");}});}}鼠标事件鼠标事件指的是使用鼠标所进行的操作,如单击鼠标、双击鼠标、松开鼠标等。Java使用MouseEvent类描述鼠标事件。可以通过实现MouseListener接口定义监听器或通过继承适配器MouseAdapter类定义监听器,然后调用addMouseListener()方法将监听器绑定到事件源对象。MouseEvent类、MouseAdapter类和MouseListener接口均位于java.awt.event包。importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassMouseEventdemo{

publicstaticvoidmain(Str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论