![第8章 图形界面程序设计_第1页](http://file4.renrendoc.com/view/bd49e52535dfa01a25cbaa92162b0669/bd49e52535dfa01a25cbaa92162b06691.gif)
![第8章 图形界面程序设计_第2页](http://file4.renrendoc.com/view/bd49e52535dfa01a25cbaa92162b0669/bd49e52535dfa01a25cbaa92162b06692.gif)
![第8章 图形界面程序设计_第3页](http://file4.renrendoc.com/view/bd49e52535dfa01a25cbaa92162b0669/bd49e52535dfa01a25cbaa92162b06693.gif)
![第8章 图形界面程序设计_第4页](http://file4.renrendoc.com/view/bd49e52535dfa01a25cbaa92162b0669/bd49e52535dfa01a25cbaa92162b06694.gif)
![第8章 图形界面程序设计_第5页](http://file4.renrendoc.com/view/bd49e52535dfa01a25cbaa92162b0669/bd49e52535dfa01a25cbaa92162b06695.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章图形界面程序设计图形用户界面构成组件的组织—布局管理器Swing容器Swing组件项目学做课程内容二三四五一项目拓展六
一、图形用户界面构成之前我们所编写的Java程序都是在DOS方式下运行的而Windows平台通过窗口式的图形界面实现人机对话,因此编写图形方式的Java程序也是必须的。
一、图形用户界面构成设计一个图形用户界面,界面如图所示:
例1所需要的知识点图形用户界面基础知识布局管理器的使用图形用户界面(GraphicsUserInterface,GUI)是程序与用户交互的方式,利用它系统可以接收用户的输入并向用户输出程序运行的结果。
一、图形用户界面构成
一、图形用户界面构成java.awt包:java.awt包中提供了大量的进行GUI设计所使用的类和接口,是Java语言进行GUI程序设计的基础。javax.swing包:swing是由100%纯Java实现的,没有本地代码,不依赖操作系统的支持,它的出现使得Java的图形用户界面上了一个台阶。
二、组件的组织—布局管理器所谓布局,就是讨论各组件在容器中如何摆放的问题。Java的组件不使用坐标这种绝对定位的形式,而使用布局管理器(layoutmanager)进行相对定位,使得程序界面能够自动适应不同分辨率的屏幕
二、组件的组织—布局管理器布局管理器是容器所具有的特性,每种布局管理器都指定了一套组件的放置形式,适合于不同的场合。Java的布局管理器常用的有4种:FlowLayout(流式布局)
将组件逐个放到容器的一行上
一行放满后就重新起一个新行BorderLayout(边界布局)
容器被划分为东(East)、南(South)、
西(West)、北(North)、中(Center)
二、组件的组织—布局管理器
二、组件的组织—布局管理器GridLayout(网格式布局)
将容器分为大小相等的若干行乘若干列的网格,组件从左至右,从上到下放入网格中,每个组件占一格(表格式)每个容器都有一个默认的布局管理器当容器被创建后,可以通过特定的方法改变容器的布局管理器java.awt.ComponentContainerWindowFrameDialogPaneljava.applet.AppletBorderLayoutFlowLayout
二、组件的组织—布局管理器1.FlowLayout布局管理器FlowLayout是Panel类的默认布局管理器布局方式:
将组件逐个地放在容器的一行上,一行放满就另起一个新行。
其中,一行的长度取决于容器的宽度
二、组件的组织—布局管理器1.FlowLayout布局管理器构造方法:publicFlowLayout();publicFlowLayout(intalign);publicFlowLayout(intalign,inthgap,intvgap);其中,align表示对齐方式,hgap和vagp表示组件的水平和垂直间距,单位是像素。若没有指定align,则默认让组件居中摆放align的取值为常量:FlowLayout.LEFT,
FlowLayout.RIGHT和FlowLayout.CENTER例如:newFlowLayout(FlowLayout.LEFT)
二、组件的组织—布局管理器1.FlowLayout布局管理器设置FlowLayout布局
FlowLayoutflow=newFlowLayout();
Framefr=newFrame();
fr.setLayout(flow);由于一个容器只要设置了布局通常就不会再改变,因此上面的语句可以简化成:
fr.setLayout(newFlowLayout());
二、组件的组织—布局管理器1.FlowLayout布局管理器可以设置框架fr为组件左对齐的FlowLayout布局:
fr.setLayout(newFlowLayout(FlowLayout.LEFT));还可以设置框架fr为组件左对齐的FlowLayout布局,并且组件的水平间距为20像素,垂直间距为40像素:
fr.setLayout(newFlowLayout(FlowLayout.LEFT,20,40));
二、组件的组织—布局管理器2.BorderLayout布局管理器BorderLayout是Frame类和Dialog类的默认布局管理器布局方式:
容器被划分为东(East)、南(South)、
西(West)、北(North)、中(Center)五个区域变化规律为:组件的相对位置不变,大小发生变化。
二、组件的组织—布局管理器水平拉宽我们可以看到:南、北、中控件大小会有变化,东、西控件大小不变化。2.BorderLayout布局管理器
二、组件的组织—布局管理器上下拉长可以看到:东、西、中控件大小会有变化,南、北控件大小不变化。2.BorderLayout布局管理器
二、组件的组织—布局管理器2.BorderLayout布局管理器构造方法:publicBorderLayout();publicBorderLayout(inthgap,intvgap);其中,hgap和vagp表示组件的水平和垂直间距,单位是像素,默认为0
二、组件的组织—布局管理器2.BorderLayout布局管理器Container容器类放置组件的方法:
publicComponentadd(Componentcomp,intindex)
其中,index指明组件放置的区域,分别为:
BorderLayout.EAST或"East"
BorderLayout.WEST或"West"
BorderLayout.SOUTH或"South"
BorderLayout.NORTH或"North"
BorderLayout.CENTER或"Center"
二、组件的组织—布局管理器3.GridLayout布局管理器布局方式:
这是一种网格式布局,它将容器分为大小相等的若干行和若干列的网格,组件从左至右从上到下依次放入网格中,每个组件占一格
实际上,这种布局方式就是一个表格
二、组件的组织—布局管理器使容器中的各组件呈网格状分布。各组件的排列方式为:从上到下,从左到右。组件放入容器的次序决定了它在容器中的位置。网格每列宽度相同,等于容器的宽度除以网格的列数。网格每行高度相同,等于容器的高度除以网格的行数。容器大小改变时,组件的相对位置不变,大小会改变。若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。
二、组件的组织—布局管理器3.GridLayout布局管理器构造方法:publicGridLayout();publicGridLayout(introws,intcols);publicGridLayout(introws,intcols,
inthgap,intvgap);
其中,rows和cols表示行数和列数;hgap和vagp表示组件的水平和垂直间距,单位是像素,默认为0当没有rows和cols时,将构造一个只有一行的网格,列数由组件的个数而定
二、组件的组织—布局管理器importjava.awt.*;importjavax.swing.*;classGridFrameextendsJFrame{
publicGridFrame(Strings){ super(s); setSize(200,200); Stringstr[]={"1","2","3","4","5","6","7","8","9"}; setLayout(newGridLayout(3,3,2,2));JButtonbtn[];//声明按钮数组
btn=newJButton[str.length];//创建按钮数组
for(inti=0;i<str.length;i++){btn[i]=newJButton(str[i]);this.add(btn[i]);} setVisible(true);
}
publicstaticvoidmain(String[]args){GridFramegl=newGridFrame("网格布局演示!"); }}
网格布局示例
二、组件的组织—布局管理器在实际应用中,网格布局(有时仅仅一行或者一列)在组织窗口的局部区域比较有用。添加修改删除查询统计如果需要一行或多行相同尺寸的按钮,那么可以把按钮放在一个面板里,该面板使用网格布局进行管理。
二、组件的组织—布局管理器网格组布局是所有布局管理器之母。可看作是没有限制的网格布局。它按行列来排列组件,但是行和列的大小都是可变的,并且可以合并相邻的单元格来适应更大的组件。组件不需要填充整个单元格区域,并且可以指定单元格内的对齐方式。使用网格组布局管理器进行布局的步骤创建一个GridBagLayout类型的对象。不必指定网格的行数和列数,布局管理器会根据后面所给的信息来确定。把此对象设成容器的布局管理器。创建一个GridBagConstraints类型的对象。该对象指定组件如何在网格组中布局。对于每一个组件,填充GridBagConstraints对象。最后,使用add(component,constraints)方法来添加组件和约束。
二、组件的组织—布局管理器成员变量gridx,gridy:指定添加组件左上角的行和列的位置,坐标从0开始。gridwidth,gridheight:指定组件将占用多少行和多少列。weightx,weighty:区域放大时的增量参数,网格布局中的每个区域都需要设置。如果设置为0,那么该区域将永远保持它的初始尺寸不变。如果你需要一行或一列保持固定大小,那么你需要把该行或该列的所有组件的增量都设置为0。这些变量的缺省值为0。ipadx,ipady:指定组件的最小高度和宽度
二、组件的组织—布局管理器成员变量fill:指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONEanchor:指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER
二、组件的组织—布局管理器GridBagLayoutlayout=newGridBagLayout();panel.setLayout(layout);GridBagConstraintsconstraints=newGridBagConstraints();Constraints.weightx=100;Constraints.weighty=100;Constraints.gridx=0;Constraints.gridy=2;Constraints.gridwidth=2;Constraints.gridheight=1;contentPane.add(style,bold);
二、组件的组织—布局管理器
类GridBagConstraints中提供了一些相应的属性和常量来设置对组件的空间限制:
gridx,gridygridwidth,gridheightfillipadx,ipadyinsetsarchorweightx,weighty
二、组件的组织—布局管理器(1)gridx,gridy(int)gridx指明组件显示区域左端在容器中的位置,若为0,则组件处于最左端的单元。它是一个非负的整数,其缺省值为GridBagConstraints.RELATIVE,表明把组件放在前一个添加到容器中的组件的右端。
gridy指明组件显示区域上端在容器中的位置,若为0,则组件处于最上端的单元。它是一个非负的整数,其缺省值为GridBagConstraints.RELATIVE,表明把组件放在前一个添加到容器中的组件的下端。
二、组件的组织—布局管理器(2)gridwidth,gridheight(int)
gridwidth指明组件显示区在一行中所占的网格单元数(宽度)。它是一个非负的整数,其缺省值为1。若其值为GridBagConstraints.REMAINDER,表明该组件是一行中最后一个组件;若其值为GridBagConstraints.RELATIVE,表明该组件紧挨着该行中最后一个组件。
gridheight指明组件显示区在一列中所占的网格单元数(高度)。它是一个非负的整数,其缺省值为1。若其值为GridBagConstraints.REMAINDER,表明该组件是一列中最后一个组件;若其值为GridBagConstraints.RELATIVE,表明该组件紧挨着该列中最后一个组件。
二、组件的组织—布局管理器(3)fill(int)
fill属性指明当组件所在的网格单元的区域大于组件所请求的区域时,是否改变组件的尺寸:是按照水平方向填满显示区,还是按垂直方向填满显示区,其取值可为:
GridBagConstraints.NONE:缺省值,保持原有尺寸,两个方向都不填满;
GridBagConstraints.HORIZONTAL:按水平方向填满显示区,高度不变;
GridBagConstraints.VERTICAL:按垂直方向填满显示区,宽度不变;
GridBagConstraints.BOTH:两个方向上都填满显示区。
二、组件的组织—布局管理器(4)ipadx,ipady(int)
ipadx指明组件的宽度与指定的最小宽度之间的关系:组件的宽度为“指定的最小宽度+ipadx*2”。其缺省值为0。
ipady指明组件的高度与指定的最小高度之间的关系:组件的高度为“指定的最小高度+ipady*2”。其缺省值为0。
二、组件的组织—布局管理器(5)insets(Insets)
insets指明了组件与其显示区边缘之间的距离,大小由一个Insets对象指定。
Insets类有四个属性:
top:上端间距
bottom:下端间距
left:左端间距
right:右端间距其缺省值为一个上述四个属性值都为0的对象:
newInsets(0,0,0,0);
二、组件的组织—布局管理器NCEPU(6)archor(int)
archor属性指明了当组件的尺寸小于其显示区时,在显示区中如何放置该组件的位置,其值可为:
GridBagConstraints.CENTER(缺省值)
GridBagConstraints.NORTHGridBagConstraints.NORTHEASTGridBagConstraints.EASTGridBagConstraints.SOUTHEASTGridBagConstraints.SOUTHGridBagConstraints.SOUTHWESTGridBagConstraints.WESTGridBagConstraints.NORTHWEST
二、组件的组织—布局管理器(7)weightx,weighty(double)
weightx指明当容器扩大时,如何在列间为组件分配额外的空间,其值可以从0.0到1.0,缺省值为0.0。
weighty指明当容器扩大时,如何在行间为组件分配额外的空间,其值可以从0.0到1.0,缺省值为0.0。若两者都为0,所有组件都团聚在容器的中央,因为此时所有额外空间都添加在网格单元与容器边缘之间。数值越大,表明组件的行或列将占有更多的额外空间。若两者都为1.0,表明组件的行或列将占有所有的额外空间。
二、组件的组织—布局管理器
当一个容器的布局方式为GridBagLayout时,往其中添加一个组件,必须先用GridBagConstraints设置该组件的空间限制。//在一个容器中GridBagLayoutg=newGridBagLayout();GridBagConstraintsc=newGridBagConstraints();setLayout(g);Buttonb=newButton(“Test”);//生成组件bc.fill=…//设置c的值……g.setConstraints(b,c);//根据c的值对组件b进行空间限制add(b);
二、组件的组织—布局管理器
GridBagLayout是获取GridBagConstraints实例中的值为某个组件设置了空间限制,当往容器中添加了该组件后,该GridBagConstraints实例还可继续用于其他组件,当然其中值需要做相应的调整。
二、组件的组织—布局管理器使用一个网格组布局的步骤在一张纸上绘出组件布局草图。找出这样一种网格:小组件可以容纳在一个单元格内,大组件占用多个单元格。使用0、1、2、……来标记网格中的行和列。现在可以设置gridx、gridy、gridwidth、gridheight的值。对于每个组件来说,考虑如下问题:它是否需要水平或垂直地填充它所在的单元格?如果不是,那么它应该如何对齐?这些问题的答案就是fill和anchor参数。把所有的增量都设置为100。然而,如果你需要某一行或某一列始终保持它的默认大小,那么把属于该行或该列的所有组件的weightx或weighty都设置为0。编写代码。仔细检查GridBagConstraints的设置。一个错误的约束参数可能会破坏整个布局。编译、运行程序。网格组布局示例3.null布局管理器前面所述的五种布局都不能随意地放置组件,即不能达到精确定位和控制组件的要求。那么如何像VB、VC++等RAD(快速开发环境)那样实现精确定位的目的呢?答案是使用null布局。使用null布局如图所示的登录页面,模拟公司招聘员工管理系统项目程序、员工登陆系统时,先进行身份验证(用户名和口令)
二、组件的组织—布局管理器用户名称:
用户密码:chengyongxiao******登陆重设_□X3.null布局管理器请用户改变窗口的大小,你将发现组件的大小和位置不会随着窗口的变化而变化,这不符合一般应用程序的要求,因此这种布局具有很多局限性。
总之,在实际中应灵活使用布局,将多种布局联合起来使用,仅使用一种是很难满足设置要求的。
二、组件的组织—布局管理器Swing组件都是AWT的Container类的直接子类或间接子类。
三、Swing容器Swing的类层次结构ObjectComponentJFrameContainerWindowFrameDialogJDialogJTextJComboBoxJLabelJListJMenuBarJOptionPaneJPanelJScrollBarAbstractButtonJToggleButtonJMenuItemJButtonJCheckBoxJRadioButtonJComponentJMenuAppletJApplet创建可视化界面的一般步骤选择外观布局管理添加组件事件处理
创建容器java程序的GUI设计主要包括下述三个概念:组件—Component容器—Container布局管理器--LayoutManager
三、Swing容器顶级容器:一般是一个顶层窗口(框架)JFrame:用于框架窗口的类,应用程序至少使用一个框架窗口。JDialog:用于对话框的类。JApplet:用于使用Swing组件的JavaApplet的类。中间容器:需要包含在顶层容器中使用的容器。JPanel:面板,是最灵活、最常用的中间容器。JScrollPane:与JPanel类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按钮)。
三、Swing容器在AWT库中,对应于框架的类是Frame,在Swing库中,相应的类是JFrame。JFrame类扩展了Frame类。大部分AWT组件在Swing中都有等价的组件,它们在表示形式上差一个“J”。
三、Swing容器—JFrameJFrame的使用JFrame类的构造方法如下:JFrame()创建无标题的初始不可见框架。JFrame(Stringtitle)创建标题为title的初始不可见框架。为了在选择框架的关闭按钮时能退出程序,应添加WindowListener监听器或书写下列代码:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame的常用方法setIconImage——窗口最小化(在Java中称为图标化)时,把一个Image对象用作图标setTitle——设置窗口中标题栏的文字setResizable——设置用户是否可以改变框架大小。dispose——关闭窗口,并回收该窗口的所有资源setLocation——设置组件的位置setBounds——重新设置组件的大小和位置。setSize()——用来设置大小。setVisible(true)——用来设置该窗口为可见的对JFrame添加组件有两种方式:(1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)如何添加组件(2)建立一个Jpanel或JDesktopPane等中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JpanelcontentPane=newJpanel();……//把其它组件添加到Jpanel中;frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容面板JFrame的使用Swing常用的容器—JPanelJPanel面板是一种添加到其他容器使用的容器组件。JPanel的构造方法:publicJPanel()publicJPanel(LayoutManagerlayout)
JPanel可指定边界,可用JComponent类的setBorder()方法设置边界。其用法如下:
publicvoidsetBorder(Borderborder)Swing常用容器—JPanel的使用JPanel面板是容器组件,没有标题,不能独立存在。实例化以后必须使用Container类的add方法装入到Window对象或Frame对象中。可用javax.swing.BorderFactory类中的方法获得importjavax.swing.*;importjava.awt.*;importjava.awt.image.BufferedImage;importjavax.imageio.ImageIO;classGUIDemo1{ publicstaticvoidmain(String[]args)throwsException {JFramef=newJFrame("第一个Java窗口"); f.setSize(300,200);BufferedImageimage=ImageIO.read(f.getClass().getResource("/MPj.jpg"));f.setIconImage(image);//设置图标
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setVisible(true);//设置容器可见性f.setResizable(false);f.setLocationRelativeTo(null);
JPanelp=newJPanel(); p.setBackground(Color.BLUE); f.setLayout(null); p.setSize(100,100); f.getContentPane().add(p); }}课堂练习设计一个含有JPanel的自定义的JFrame类,形式如下图:三、Swing的常用组件—JLabelJLabel(标签)是用户只能查看不能修改的文本/图像显示区域。
三、Swing的常用组件--JTextFieldJTextField(单行文本域)是一个单行条形文本区,能够接收输入、显示输出。获得文本域的内容x=Integer.parseInt(text1.getText().trim());
重新设置文本域的内容resultText.setText(s);
三、Swing的常用组件--JTextFieldsetText(Strings)设置文本框中的文本getText()获取文本框中的文本setEditable(booleanb)指定文本框的可编辑性。创建的文本框默认为可编辑的获取两个文本域的输入并求和,然后显示在第三个文本域中。三、Swing的常用组件—JTextFieldimportjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTFMath{ publicstaticvoidmain(String[]args){ newTFFrame().launchFrame(); }}classTFFrameextendsJFrame{ JTextFieldnum1,num2,num3; publicvoidlaunchFrame(){ num1=newJTextField(10); num2=newJTextField(10); num3=newJTextField(15); JLabellblPlus=newJLabel("+"); JButtonbtnEqual=newJButton("="); btnEqual.addActionListener(newMyMonitor()); setLayout(newFlowLayout()); add(num1); add(lblPlus); add(num2); add(btnEqual); add(num3); pack(); setVisible(true); }
Swing常用的组件——文本域
privateclassMyMonitorimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ intn1=Integer.parseInt(num1.getText()); intn2=Integer.parseInt(num2.getText()); num3.setText(""+(n1+n2)); } }
}Swing的常用组件--JPasswordFieldJPasswordField(口令框)接受用户的输入,但不会真正显示出来,而是显示回显符。密码域JPasswordFieldimportjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassTFPassword{ publicstaticvoidmain(String[]args){ newTFFrame2(); }}密码域JPasswordFieldclassTFFrame2extendsJFrame{ TFFrame2() { JPasswordFieldpf=newJPasswordField(); add(pf); pf.addActionListener(newTFActionListener2()); pack(); setVisible(true); }}密码域JPasswordFieldclassTFActionListener2implementsActionListener{ publicvoidactionPerformed(ActionEvente) { JPasswordFieldpf=(JPasswordField)e.getSource(); System.out.println(pf.getText()); tf.setText(""); }}密码域JPasswordFieldSwing的常用组件--JPasswordField实战:实现上面的图形用户界面。Swing的常用组件--JTextAreaJTextArea(多行文本框)可以输入或输出多行文本。设定是否可编辑
setEditable(Booleanb)JTextArea(Stringtext,introws,intcolumns)指定文本创建文本区,指定行数和列数换行方式:手动换行自动换行:通过设置换行属性来避免手动换行。增加滚动条:通过把文本区插入到一个滚动窗格中来实现。这也是给其他组件添加滚动条的方法。textArea.setLineWrap(true);JScrollPanescrollPane=newJScrollPane(textArea);Swing的常用组件--JTextArea文本区的三种显示方式Swing的常用组件--JTextArea例:创建包含文本区、文本框和“提交”按钮的窗口。
在文本区中输入文字,单击“提交”按钮,文本
框中会出现同样的文字。Swing的常用组件--JTextAreaimportjava.awt.*;importjavax.swing.*;classJTextAreaExextendsJFrame{JTextAreata;JTextFieldt;JButtonb;JTextAreaEx(){setSize(400,250);setLayout(newFlowLayout());Containerc=getContentPane();setVisible(true);ta=newJTextArea(5,10);//创建文本区、文本框和按钮
ta.setLineWrap(true);//自动换行,只添加垂直滚动条
JScrollPanescrollPane=newJScrollPane(ta);//加滚动条
scrollPane.setBorder(BorderFactory.createLoweredBevelBorder());//设置边界
c.add(scrollPane);t=newJTextField(10);b=newJButton("提交");c.add(b);c.add(t);pack();}
publicstaticvoidmain(String[]args){JTextAreaExtae=newJTextAreaEx();}publicvoidactionPerformed(ActionEvente){ t.setText(ta.getText()); }}其他Swing组件的使用NCEPUSwing的常用组件—复选框JCheckBoxJCheckBox(复选框)有选中和未选中两种状态,允许用户从一组选项中进行多个选择。
设置复选框的文本
setText获取复选框的文本
getText常用的构造方法有:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected)Swing的常用组件—复选框JCheckBoxJCheckBox的相关事件类事件响应用户点击复选框使其选中状态发生变化时会引发
ItemEvent事件。实现ItemListener接口的itemStateChanged()方法。publicvoidaddItemListener(ItemListenerl)
设置复选框的事件监听器。查阅JDK文档,学习ItemEvent类的常用方法。例题:创建如下窗口,包含三个复选框和一个面板,选中某一复选框后,面板的背景色就变成相应的颜色。Swing的常用组件—复选框JCheckBoximportjava.awt.*; importjava.awt.event.*;publicclassCheckBoxExpimplementsItemListener{ Framef;Panelp1,p2; Checkboxck1,ck2,ck3; publicvoiddisplay() {f=newFrame("复选框练习"); ck1=newCheckbox("红色"); ck2=newCheckbox("黄色"); ck3=newCheckbox("蓝色"); p1=newPanel();p2=newPanel(); f.add(p1,"North");f.add(p2);p1.add(ck1);p1.add(ck2);p1.add(ck3);f.setSize(400,200);f.setVisible(true); ck1.addItemListener(this); ck2.addItemListener(this); ck3.addItemListener(this);}publicvoiditemStateChanged(ItemEvente)
{ if(e.getSource()==ck1) p2.setBackground(Color.red);elseif(e.getSource()==ck2) p2.setBackground(Color.yellow); else p2.setBackground(Color.blue);
} publicstaticvoidmain(Stringargs[]){ newCheckBoxExp().display(); }
}Swing常用的组件—单选框JRadioButtonJRadioButton(单选按钮)通常是成组使用的,可以通过ButtonGroup类进行管理。常用的构造方法有:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected)单选框(JRadioButton)示例要保证三个JRadioButton的互斥性应该把这三个控件放到同一个ButtonGroup中Swing的常用组件—组合框JComboBoxJComboBox(组合框)是一种“多选一”的组件,可编辑每项的内容,而且每项的内容可以是任意类。当用户选取组合框中的某一选择项时,可激发ItemEvent事件。常用的构造方法有:
构造函数使用缺省数据模型创建JComboBoxpublicJComboBox()包含指定数组元素的组合框publicJComboBox(Object[]items)Swing的常用组件—组合框JComboBox创建组合框向组合框对象里加入条目
JComboBoxjobsBox=newJComboBox();jobsBox.addItem("job1");jobsBox.addItem("job2");使用String数组创建
String[]comboItem={“job1”,”job2”};JComboBoxjobsBox=newJComboBox(comboItem);
对组合框是否能够被编辑也可以进行设置。
jobsBox.setEditable(true);Swing的常用组件—组合框JComboBox组合框的内容可以动态变化addItem方法:把条目添加到列表的末尾;insertItermAt方法:将新条目添加到列表的任何位置;removeItem方法和removeItemAt方法:删除指定条目;removeAllItems方法:删除所有条目。Swing的常用组件—组合框JComboBoxjobsBox.insertItermAt(“job7”,6);//在第7个位置增加“job7”条目。jobsBox.removeItem(“job7”);//删除“job7”条目。jobsBox.removeItemAt(5);//删除第6个条目,即“job6”。jobsBox.removeAllItems();//删除所有条目。当选择组合框的条目时,会产生单击事件(ActionEvent)和项事件(ItemEvent)。组合框事件处理方法说明
publicObjectgetSelectedItem()返回当前选中项。注意类型。
publicintgetSelectedIndex()返回选中项的位置。列表中第一项的位置是0。组合框(JComboBox)常用的事件处理方式Swing的常用组件—列表框(JList)JList(列表框)向用户显示一组选项构造方法publicJList()
构造空列表publicJList(Object[]
listData)
以数组中的元素构造一个JList。
String[]fontSize={“小四”,“四号”,“小五”,“五号”};JListlist=newJList(fontSize);publicJList(Vector<?>
listData)
以Vector中的元素构造一个
JList。建立列表框前,需要指定所显示的列表条目:String[]courses={“Math”,“English”,“Physics”,“Chemic”,“Biology”,“Politics”};JListcourseList=newJList(courses);如果列表框比较长,而显示屏幕比较小,可以设置列表中显示的行数,同时使用滚动条:courseList.setVisibleRowCount(4);JScrollPanelistScrollPane=newJScrollPane(courseList);Swing的常用组件—列表框(JList)选择列表框中的多个条目有两种方式:连续条目选择和间断条目选择。用户选择列表框条目时,列表框就会产生选择事件。将列表选择监听器ListSelectionListener添加给列表组件,并在该监听器中实现valueChanged方法:courseList.addListSelectionListener(newcourseListener());...classcourseListenerimplementsListSelectionListener{ publicvoidvalueChanged(ListSelectionEventevent) {...}}获得用户所选择的列表框条目以及条目所在的索引号需要使用getSelectedValues方法和getSelectedIndices方法:Object[]selectedCourses=courseList.getSelectedValues();int[]selectedIndexCourses=courseList.getSelectedIndices();Swing的常用组件—列表框(JList)JList(列表框)可以选择一项或多项。列表框查阅JDK文档,学习JList类的常用方法及相关事件。Swing的常用组件—列表框(JList)练习例:创建一个包含列表框和文本框的窗口,要求单击或双击列表框中某一选项后,文本框中显示该选项。Swing的常用组件—列表框(JList)
importjava.awt.*;importjava.awt.event.*;publicclassList1implementsActionListener,ItemListener{Framef;TextFieldtf1;Listls1;
publicvoiddisplay(){ f=newFrame("列表框练习"); f.setSize(300,200); f.setLocation(300,300); f.setBackground(Color.lightGray); f.setLayout(newFlowLayout()); tf1=newTextField(10);f.add(tf1);
ls1=newList();f.add(ls1); ls1.add("北京"); ls1.add("上海");ls1.add("南京"); ls1.add("西安");f.setVisible(true);ls1.addActionListener(this);
ls1.addItemListener(this);}
publicvoidactionPerformed(ActionEvente){ tf1.setText(ls1.getSelectedItem());}
publicvoiditemStateChanged(ItemEvente){ tf1.setText(ls1.getSelectedItem());}
publicstaticvoidmain(Stringarg[]){(newList1()).display();}}NCEPUSwing的常用组件—菜单JMenuItem类型有三种:JMenuItemJCheckBoxMenuItemJRadioButtonMenuItemJMenuBarJMenuJMenuItem菜单的分类菜单条式菜单(下拉菜单)弹出式菜单菜单组件与其他组件不同,不能放入普通的容器,也无法用布局管理器对其加以控制,只能被放入菜单容器中。Swing的常用组件—菜单下拉式菜单
下拉式菜单主要由三部分组成菜单条(JMenuBar)菜单(JMenu)菜单项(JMenuItem)。菜单栏菜单条菜单菜单项创建菜单栏
JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);创建菜单JMenufileMenu=newJMenu("File");创建子菜单。JMenuoptionMenu=newJMenu("Option");创建菜单项
JMenuItemnewfile=newJMenuItem("新建");创建下拉式菜单将菜单项加入到子菜单或菜单中。将子菜单加入到菜单中。将菜单加入到菜单栏中。创建菜单的步骤importjavax.swing.*;importjava.awt.event.*;publicclassMenuDemoextendsJFrameimplementsActionListener{ JTextAreatf=newJTextArea(); JMenuBarmbar=newJMenuBar(); JMenumenu=newJMenu("文件"); JMenuItemnewfile=newJMenuItem("新建"); JMenuItemopen=newJMenuItem("打开"); JMenuItemclose=newJMenuItem("关闭"); JMenuItemquit=newJMenuItem("退出");
创建菜单的步骤publicMenuDemo(){ super("Menu实例");newfile.addActionListener(this); open.addActionListener(this); close.addActionListener(this); quit.addActionListener(this);menu.add(newfile);menu.add(open);menu.add(close);menu.addSeparator();menu.add(quit);
mbar.add(menu);setJMenuBar(mbar); add(tf); addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);} }); }
publicvoidactionPerformed(ActionEvente){ if(e.getSource()==newfile)tf.setText("新建文件"); if(e.getSource()==open)tf.setText("打开文件"); if(e.getSource()==close)tf.setText("关闭文件"); if(e.getSource()==quit)System.exit(0); }publicstaticvoidmain(String[]args){ JFramef=newMenuDemo(); f.setSize(200,200); f.setVisible(true);}}
同创建一般的菜单项几乎一样,只需注意复选框和单选按钮的不同构造方法以及单选按钮组的构建:创建单选按钮菜单项“Forward”,并将“Forward”菜单项加入到“Search”菜单中。ButtonGroupgroup=newButtonGroup();forwardItem=newJRadioButtonMenuItem("Forward");group.add(forwardItem);searchMenu.add(forwardItem);创建复选框菜单项“ToolBar”,并加入到子菜单中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem("ToolBar");optionMenu.add(toolItem);创建复选框和单选按钮菜单项
菜单项的使用状态菜单项能够被选取取决于菜单项的启用和禁用状态://初始设置“Save”菜单项为禁用状态。saveItem.setEnabled(false);快捷键和加速器快捷键显示为带有下划线的字母,加速器则显示为菜单项旁边的组合键。://设置菜单的快捷键。fileMenu.setMnemonic('F');//设置“Exit”菜单项的快捷键为“T”。JMenuItemexitItem=newJMenuItem("Exit",'T');//设置“Exit”菜单项的加速器为“Ctrl+T”。exitItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_T,InputEvent.CTRL_MASK));Swing的常用组件—菜单弹出式菜单弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。弹出式菜单。popup=newJPopupMenu();新建弹出式菜单中的“Cut”菜单项和监听器。cutItemPop=newJMenuItem("Cut",'C');popup.add(cutItemPop);Swing的常用组件—菜单菜单示例
创建菜单栏创建菜单加入到菜单栏中创建菜单项加入到菜单中最后将整个菜单栏加入到某个容器中(Frame)事件处理创建菜单的步骤创建如下图所示的带菜单的窗口,完成相应的绘图功能。NCEPUimportjava.awt.*; importjava.awt.event.*;publicclassMenuExpimplementsActionListener{Framef;MenuBarmyMenuBar;MenumenuDraw,menuHelp;MenuItemitemCircle,itemRect,itemLine;
publicvoiddisplay(){f=newFrame("带有菜单的窗口");f.setSize(300,300);f.setLocation(300,300);f.setBackground(Color.lightGray);myMenuBar=newMenuBar();menuDraw=newMenu("画图");menuHelp=newMenu("帮助");myMenuBar.add(menuDraw);myMenuBar.add(menuHelp);itemCircle=newMenuItem("画圆");itemRect=newMenuItem("画矩形");itemLine=newMenuItem("画线");
NCEPU
menuDraw.add(itemLine);menuDraw.add(itemCircle);menuDraw.add(itemRect);f.setMenuBar(myMenuBar);f.setVisible(true);itemCircle.addActionListener(this);itemRect.addActionListener(this);itemLine.addActionListener(this);}publicvoidactionPerformed(ActionEvente){ if(e.getActionCommand()==“画圆”)
f.getGraphics().drawOval(100,100,150,150); elseif(e.getActionCommand()==“画矩形”)
f.getGraphics().drawRect(50,1a00,100,100); elseif(e.getActionCommand()==“画线”)
f.getGraphics().drawLine(100,100,200,200); }
publicstaticvoidmain(Stringarg[]){(newMenuExp()).display();}NCEPU创建JMenuItem先创建一个JMenuBar对象再创建若干个JMenu对象添加处理事件添加JMenuItem到JMenu添加JMenu到JMenuBar添加JMenuBar到容器NCEPU先创建一个JMenuBar对象再创建若个JMenu对象Swing常用的组件—对话框对话框分为模式对话框和无模式对话框。模式对话框必须在用户处理完后才允许用户与主窗口继续进行交互。无模式对话框允许用户同时在对话框和程序剩余部分中输入信息。在Swing中,提供了四种简单的对话框:showMessageDialog:显示一条消息等待用户点击OK;showConfirmDialog:显示一条消息并等待确认;showOptionDialog:显示一条消息并等待用户在一组自定义选项中的选择;showInputDialog:显示一条消息并等待用户的输入。以showConfirmDialog为例:对话框的使用
底部按钮的类型和对话框有密切的关系,对于showMessageDialog和showInputDialog对话框来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿泉水产业技术创新与品牌增值
- Assessment I 第一课时 表格式(教学设计)-2024-2025学年湘少版(三起)英语六年级上册
- 7 多元文化 多样魅力-《多彩的世界文化》 (教学设计)统编版道德与法治六年级下册
- 香港大学教育学院
- 电信号务行业的网络安全挑战与对策研究报告
- 14《普罗米修斯》 教学设计-2024-2025学年四年级上册语文统编版
- 现代校园文化的网络传播策略及效果评估
- 社交媒体与旅游市场开发的结合
- 10《父母多爱我》第一课时(教学设计)-部编版道德与法治三年级上册
- Module 4 Unit 2 Our Favourite Festival is the Spring Festival(教学设计)-2024-2025学年外研版(三起)英语六年级上册
- 海上日出配套说课PPT
- 新青岛版(五年制)五年级下册小学数学全册导学案(学前预习单)
- (完整word版)重点监管的危险化学品名录(完整版)
- 详情页测试文档20220802
- 专利纠纷行政调解办案指南
- 经编工艺基本样布的分析
- 2010哈弗H5维修手册
- 一文看懂全部变电站电气主接线方式
- 完整版陆河客家请神书
- 通用5轴焊锡机系统(V11)
- 应答器报文定义《运基信号[2005]224号》
评论
0/150
提交评论