第9章(2)窗口菜单

上传人:wjs****19 文档编号:241790686 上传时间:2024-07-24 格式:PPT 页数:51 大小:416.51KB
返回 下载 相关 举报
第9章(2)窗口菜单_第1页
第1页 / 共51页
第9章(2)窗口菜单_第2页
第2页 / 共51页
第9章(2)窗口菜单_第3页
第3页 / 共51页
点击查看更多>>
资源描述
第第9章章 窗口和菜单窗口和菜单9.1 窗口窗口9.2 菜单菜单9.3 Swing简介简介习题习题Java的窗口由的窗口由Frame类生成,遗憾的是它不具有关类生成,遗憾的是它不具有关闭功能,必须要在程序中实现窗口事件监听接口并闭功能,必须要在程序中实现窗口事件监听接口并编写关闭窗口的代码才行。本节介绍了创建可关闭编写关闭窗口的代码才行。本节介绍了创建可关闭窗口的几种方法以及窗口的使用。窗口的几种方法以及窗口的使用。9.1 窗口窗口 下下面面是是一一个个应应用用程程序序,它它弹弹出出一一个个窗窗口口,可可以以移移动动、改变大小、最大化、变成图标,并且可以关闭。改变大小、最大化、变成图标,并且可以关闭。例例9.1 方方式式1:创创建建一一个个可可关关闭闭的的空空白白窗窗口口,如如图图9.1所示。所示。图图 9.1 import java.awt.*;import java.awt.event.*;9.1.1 创建可关闭窗口创建可关闭窗口 class W1 extends Frame implements WindowListener W1()super(Window1);setSize(350,200);setVisible(true);addWindowListener(this);public void windowClosing(WindowEvent e)System.exit(0);public void windowOpened(WindowEvent e)public void windowClosed(WindowEvent e)public void windowIconified(WindowEvent e)public void windowDeiconified(WindowEvent e)public void windowActivated(WindowEvent e)public void windowDeactivated(WindowEvent e)public static void main(String args)new W1();main方方法法只只有有一一条条语语句句,生生成成了了W1的的对对象象。在在W1的的构构造造方方法法中中,调调用用父父类类的的构构造造方方法法为为窗窗口口指指定定名名称称为为Window1,然然后后指指定定窗窗口口的的宽宽度度和和高高度度分分别别为为350和和200,指指定定窗窗口口可可见见,最最后后将将窗窗口口对对象象本本身身注注册册为为事事件件监监听听器器。这这4条条语语句句对对于于生生成成一一个个窗窗口口来来说都是必需的。说都是必需的。本本例例使使用用了了正正统统的的事事件件监监听听接接口口方方式式为为窗窗口口加加入入关关闭闭方方法法。但但如如果果仅仅仅仅为为了了增增加加窗窗口口的的关关闭闭功功能能而而采采用用这这种种方方式式则则不不是是最最好好的的选选择择,因因为为你你必必须须要要实实现现该接口中的所有抽象方法,不管它们是否用得上。该接口中的所有抽象方法,不管它们是否用得上。为窗口添加关闭功能可以有更简单的方式,通常是为窗口添加关闭功能可以有更简单的方式,通常是利用窗口事件适配器,将不需要的事件处理方法裁利用窗口事件适配器,将不需要的事件处理方法裁剪掉。剪掉。例例9.2 方式方式2:创建一个可关闭的空白窗口。创建一个可关闭的空白窗口。import java.awt.*;import java.awt.event.*;public class W2 extends Frame W2()super(Window2);setSize(350,200);setVisible(true);addWindowListener(new Win();public static void main(String args)new W2();9.1.2 窗口事件适配器窗口事件适配器 class Win extends WindowAdapter public void windowClosing(WindowEvent e)System.exit(0);方式方式2继承了一个窗口事件适配器类的子类继承了一个窗口事件适配器类的子类Win。窗口事件适配器窗口事件适配器WindowAdapter是一个系统类,它是一个系统类,它实现了窗口事件监听接口,覆盖了窗口事件监听接实现了窗口事件监听接口,覆盖了窗口事件监听接口中定义的口中定义的7个方法。适配器的作用实际上就是把个方法。适配器的作用实际上就是把接口变成一个类,这样你就可以随意使用类中的方接口变成一个类,这样你就可以随意使用类中的方法,不像接口要实现所有的方法。在例法,不像接口要实现所有的方法。在例9.2的程序中的程序中只覆盖了一个只覆盖了一个WindowClosing方法,其他方法则不方法,其他方法则不需再考虑。需再考虑。窗窗口口事事件件适适配配器器是是为为方方便便程程序序员员而而专专门门设设计计的的类类。定义如下:定义如下:public abstract class WindowAdapter extends Object implements WindowListener public WindowAdapter()/构造方法构造方法 public void windowOpened(WindowEvent e)/窗口被打开后调用窗口被打开后调用 public void windowClosing(WindowEvent e)/窗口被关闭时调用窗口被关闭时调用 public void windowClosed(WindowEvent e)/窗口被关闭后调用窗口被关闭后调用 public void windowIconified(WindowEvent e)/窗窗口口被被缩缩小小为为图图标标时时调用调用 public void windowDeiconified(WindowEvent e)/窗口被复原时调用窗口被复原时调用 public void windowActivated(WindowEvent e)/窗口激活时调用窗口激活时调用 public void windowDeactivated(WindowEvent e)/窗口失活时调用窗口失活时调用 从从定定义义中中可可以以看看出出,窗窗口口事事件件适适配配器器是是一一个个抽抽象象类类,可可接接收收窗窗口口事事件件,其其中中的的方方法法仅仅仅仅声声明明了了返返回回值值类类型型和和参参数数类类型型。从从这这个个类类派派生生出出来来的的子子类类可可作作为为事事件件监监听听器器,只只需需要要为为使使用用到到的的事事件件处处理理方方法法添添加加代代码码就就可可以以了了。由由子子类类生生成成的的对对象象具具有有事事件件监监听听功功能能,通通过过窗窗口口的的注注册册方方法法addWindowListener将将这这个个对对象象注注册册给给一一个个窗窗口口,每每当当窗窗口口事事件件发发生生时时,就就会会被被传递给监听对象来处理。传递给监听对象来处理。常用的事件适配器还有鼠标事件适配器常用的事件适配器还有鼠标事件适配器MouseAdapter和和MouseMotionAdapter。在在Java中中还有很多其他适配器,它们的原理都是相同的,用还有很多其他适配器,它们的原理都是相同的,用法也一样。这些事件适配器的出现,使程序员不用法也一样。这些事件适配器的出现,使程序员不用再为冗长的代码而发愁,编写程序更加简单,结构再为冗长的代码而发愁,编写程序更加简单,结构更加合理。更加合理。例例9.3 方式方式3:创建一个可关闭的空白窗口。创建一个可关闭的空白窗口。import java.awt.*;import java.awt.event.*;public class W3 public static void main(String args)Frame f=new Frame(Window3);f.setSize(350,200);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););9.1.3 匿名类匿名类 可可以以看看出出例例9.3是是最最简简单单的的一一个个程程序序,其其功功能能和和例例9.1、例、例9.2一样。一样。在在例例9.3中中使使用用了了匿匿名名类类,所所谓谓匿匿名名类类是是指指在在声声明明一一个类时不给它命名。个类时不给它命名。例例9.3取取消消了了例例9.2中中的的WindowAdapter的的子子类类Win的的 创创 建建 过过 程程,直直 接接 将将 这这 个个 子子 类类 的的 声声 明明 定定 义义 new WindowAdapter()作作 为为 参参 数数 传传 递递 给给 了了 窗窗 口口 对对 象象 的的addWindowListener方方法法,并并在在方方法法的的括括号号内内实实现现了了 子子 类类 的的 继继 承承 和和 实实 例例 化化,同同 时时 覆覆 盖盖 了了WindowAdapter的的windowClosing方方法法。这这是是匿匿名名类的一种典型使用方式。类的一种典型使用方式。从程序结构来看,使用匿名类这种处理方式最简单。从程序结构来看,使用匿名类这种处理方式最简单。事件与事件与Adapter类类事件类事件类事件处理方法接口事件处理方法接口Adapter类类ActionEventActionListener无AdjustmentEventAdjustmentListener无ComponentEventComponentListenerComponentAdapterContainerEventContainerListenerContainerAdapterItemEventItemListener无KeyEventKeyListenerKeyAdapterMouseEventMouseListenerMouseAdapterMouseMotionListenerMouseMotionAdapterTextEventTextListener无WindowEventWindowListenerWindowAdapte例例9.4 在在窗窗口口中中添添加加按按钮钮,单单击击“显显示示”按按钮钮可可以以显显示示文文字字,单单击击“退退出出”按按钮钮可可关关闭闭窗窗口口,同同时时窗窗口右上角的关闭按钮也起同样作用,如图口右上角的关闭按钮也起同样作用,如图9.2所示。所示。图图 9.29.1.4 在窗口中加入组件在窗口中加入组件 import java.awt.*;import java.awt.event.*;public class W4 extends Frame implements ActionListener Button btn1,btn2;TextField f;W4()super(Window4);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););setSize(350,200);btn1=new Button(显示显示);btn2=new Button(退出退出);f=new TextField(20);setLayout(new FlowLayout();add(f);add(btn1);add(btn2);btn1.addActionListener(this);btn2.addActionListener(this);show();public static void main(String args)new W4();public void actionPerformed(ActionEvent e)f.setText(你按下了你按下了“+e.getActionCommand()+”按钮按钮);if(e.getSource()=btn2)for(int i=0;i100000000;i+);System.exit(0);注意:注意:Frame类是容器,因此可以添加组件。类是容器,因此可以添加组件。show方法或方法或setVisible方法必须位于添加组件语句之后,方法必须位于添加组件语句之后,否则组件显示不出来。否则组件显示不出来。例例9.5 设计一个多重窗口的程序,结果如图设计一个多重窗口的程序,结果如图9.3所示。所示。import java.awt.*;import java.awt.event.*;public class W5 extends Frame implements ActionListener Button btn;W5()super(Window5);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););setSize(350,200);btn=new Button(打开新窗口打开新窗口);setLayout(new FlowLayout();9.1.5 多重窗口多重窗口 add(btn);btn.addActionListener(this);setLocation(200,100);show();public static void main(String args)new W5();public void actionPerformed(ActionEvent e)new W5();setLocation(getX()+20,getY()+20);toFront();图图 9.3 多重窗口设计的关键是哪个组件的动作能显示出新多重窗口设计的关键是哪个组件的动作能显示出新窗口,本程序中,窗口,本程序中,“打开新窗口打开新窗口”按钮就具备这个按钮就具备这个功能。单击该按钮后,将重复生成功能。单击该按钮后,将重复生成W5的新对象即的新对象即窗口。如果想生成其他窗口,可在程序中另外定义窗口。如果想生成其他窗口,可在程序中另外定义一个类来生成不同的窗口。此外在下面介绍的菜单一个类来生成不同的窗口。此外在下面介绍的菜单中,也可以用一个菜单项来生成多重窗口。中,也可以用一个菜单项来生成多重窗口。菜单是图形用户界面的重要组成部分,由菜单条菜单是图形用户界面的重要组成部分,由菜单条(MenuBar)、)、菜单(菜单(Menu)、)、菜单项菜单项(MenuItem)和复选菜单项和复选菜单项(CheckboxMenuItem)等对象组成。等对象组成。9.2 菜单菜单 例例9.6 在窗口中添加菜单,如图在窗口中添加菜单,如图9.4所示。所示。图图 9.49.2.1 为窗口加入菜单为窗口加入菜单 import java.awt.*;import java.awt.event.*;public class W6 extends Frame implements ActionListener Panel p=new Panel();Button btn=new Button(退出退出);MenuBar mb=new MenuBar();/以下生成菜单组件对象以下生成菜单组件对象 Menu m1=new Menu(文件文件);MenuItem open=new MenuItem(打开打开);MenuItem close=new MenuItem(关闭关闭);MenuItem exit=new MenuItem(退出退出);Menu m2=new Menu(编辑编辑);MenuItem copy=new MenuItem(复制复制);MenuItem cut=new MenuItem(剪切剪切);MenuItem paste=new MenuItem(粘贴粘贴);Menu m3=new Menu(帮助帮助);MenuItem content=new MenuItem(目录目录);MenuItem index=new MenuItem(索引索引);MenuItem about=new MenuItem(关于关于);W6()super(Window6);setSize(350,200);add(South,p);p.add(btn);btn.addActionListener(this);m1.add(open);/将菜单项加入到菜单中将菜单项加入到菜单中 m1.add(close);m1.addSeparator();/将分隔条加入到菜单中将分隔条加入到菜单中 m1.add(exit);exit.addActionListener(this);/注册菜单项的事件监听器注册菜单项的事件监听器 mb.add(m1);/将菜单加入到菜单条中将菜单加入到菜单条中 m2.add(copy);m2.add(cut);m2.add(paste);mb.add(m2);m3.add(content);m3.add(index);m3.addSeparator();m3.add(about);mb.add(m3);setMenuBar(mb);/显示菜单条显示菜单条 show();public static void main(String args)new W6();public void actionPerformed(ActionEvent e)if(e.getActionCommand()=退出退出)System.exit(0);菜单程序的设计很简单,首先生成菜单组件各个部菜单程序的设计很简单,首先生成菜单组件各个部分的对象,然后进行菜单组装。菜单组装是指把菜分的对象,然后进行菜单组装。菜单组装是指把菜单加到菜单条上,把菜单项加到菜单中。除了文字单加到菜单条上,把菜单项加到菜单中。除了文字菜单项外,还可以在菜单中加入分隔条。菜单项具菜单项外,还可以在菜单中加入分隔条。菜单项具有动作事件,可以响应键盘和鼠标点击事件。将动有动作事件,可以响应键盘和鼠标点击事件。将动作事件监听器注册给菜单项,就可由监听者处理菜作事件监听器注册给菜单项,就可由监听者处理菜单事件。单事件。如果在菜单中加入另外一个菜单的话,就会变成多如果在菜单中加入另外一个菜单的话,就会变成多级菜单。菜单项可以添加快捷键,以便快速打开。级菜单。菜单项可以添加快捷键,以便快速打开。菜单项也可以设计成复选菜单项,即用菜单项也可以设计成复选菜单项,即用CheckboxMenuItem生成菜单项对象。生成菜单项对象。9.2.2 菜单综合应用菜单综合应用 例例9.7 创建如图创建如图9.5所示的菜单综合应用。所示的菜单综合应用。图图 9.5import java.awt.*;import java.awt.event.*;public class W7 extends Frame implements ActionListener,ItemListener TextField msg=new TextField();MenuBar mb=new MenuBar();Menu m1=new Menu(菜单菜单);Menu m2=new Menu(二级菜单二级菜单);MenuItem item=new MenuItem(普通菜单项普通菜单项,new MenuShortcut(p);CheckboxMenuItem checkbox=new CheckboxMenuItem(复选菜单项复选菜单项);MenuItem exit=new MenuItem(退出退出);W7()setTitle(菜单综合应用菜单综合应用);setSize(350,200);add(msg);mb.add(m1);m1.add(m2);/将二级菜单将二级菜单m2加入到加入到m1中中 checkbox.setState(true);/设定复选菜单项为选中设定复选菜单项为选中 m1.add(item);m1.add(checkbox);m1.addSeparator();m1.add(exit);m2.add(菜单项菜单项);/为二级菜单为二级菜单m2加入菜单项加入菜单项 m2.add(菜单项菜单项);item.addActionListener(this);/注册事件监听器注册事件监听器 checkbox.addItemListener(this);exit.addActionListener(this);setMenuBar(mb);/显示菜单显示菜单 show();/显示窗口显示窗口 public void actionPerformed(ActionEvent e)if(e.getSource()=exit)System.exit(0);else msg.setText(e.getActionCommand()+被打开被打开);public void itemStateChanged(ItemEvent e)if(e.getSource()=checkbox)if(checkbox.getState()msg.setText(checkbox.getLabel()+被选中被选中);else msg.setText(checkbox.getLabel()+被取消被取消);public static void main(String arg)new W7();由由于于复复选选菜菜单单项项的的功功能能区区别别于于一一般般的的菜菜单单项项,所所以以它它提提供供了了额额外外的的方方法法,让让用用户户来来控控制制其其状状态态。这这些些方方法法是是getState和和setState,前前者者取取得得该该菜菜单单项项的的状状态,后者设置该菜单项的状态。态,后者设置该菜单项的状态。注意:注意:普通菜单项相当于一个命令,而复选菜单项普通菜单项相当于一个命令,而复选菜单项则不是命令。也就是说,它不产生动作事件,只产则不是命令。也就是说,它不产生动作事件,只产生状态改变事件。生状态改变事件。弹出式菜单是一种非常方便的菜单工具,它平常依弹出式菜单是一种非常方便的菜单工具,它平常依附在某个容器或组件上并不显现出来,当用户单击附在某个容器或组件上并不显现出来,当用户单击鼠标右键时它就会弹出来。鼠标右键时它就会弹出来。例例9.8 弹出式菜单应用,如图弹出式菜单应用,如图9.6所示。所示。import java.awt.*;import java.awt.event.*;public class W8 extends Frame implements ActionListener,MouseListener TextArea msg=new TextArea();PopupMenu pm=new PopupMenu();MenuItem item1=new MenuItem(复制复制);MenuItem item2=new MenuItem(剪切剪切);MenuItem item3=new MenuItem(粘贴粘贴);9.2.3 弹出式菜单弹出式菜单 W8()setTitle(弹出式菜单弹出式菜单);setSize(350,200);addWindowListener(new WindowAdapter()/注册窗口的事件监听器注册窗口的事件监听器 public void windowClosing(WindowEvent e)System.exit(0););add(msg);msg.add(pm);/将弹出式菜单加入到文本区中将弹出式菜单加入到文本区中 pm.add(item1);pm.add(item2);pm.add(item3);item1.addActionListener(this);item2.addActionListener(this);item3.addActionListener(this);msg.addMouseListener(this);/注册文本区的鼠标事件监听器注册文本区的鼠标事件监听器 show();public void actionPerformed(ActionEvent e)msg.append(你选择了你选择了+e.getActionCommand()+n);public void mouseReleased(MouseEvent e)if(e.isPopupTrigger()/判断是否单击鼠标右键判断是否单击鼠标右键 pm.show(this,e.getX(),e.getY();/显示弹出式菜单显示弹出式菜单 public void mouseClicked(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mousePressed(MouseEvent e)public static void main(String arg)new W8();图图 9.6弹出式菜单由弹出式菜单由PopupMenu创建。程序中的弹出式创建。程序中的弹出式菜单有菜单有3个菜单项,被加入到了文本区个菜单项,被加入到了文本区msg中。中。W8实现了动作事件监听接口和鼠标事件监听接口,因实现了动作事件监听接口和鼠标事件监听接口,因为文本区能产生鼠标事件,菜单项能产生动作事件,为文本区能产生鼠标事件,菜单项能产生动作事件,这两个事件都要处理。这两个事件都要处理。当当用用户户在在文文本本区区单单击击鼠鼠标标左左键键或或右右键键时时,就就触触发发了了一一个个mousePressed事事件件。由由于于在在这这个个事事件件的的处处理理方方法法 中中,只只 有有 当当 单单 击击 了了 鼠鼠 标标 右右 键键 才才 能能 使使isPopupTrigger方方法法取取真真值值,所所以以单单击击鼠鼠标标左左键键不不会会弹弹出出菜菜单单。如如果果不不用用分分支支结结构构的的话话,无无论论单单击击鼠鼠标标左左键键或或右右键键都都会会弹弹出出菜菜单单。isPopupTrigger方方法法有有3个个参参数数,第第一一个个是是含含有有坐坐标标系系的的对对象象,程程序序中中用用this来来代代表表当当前前窗窗口口对对象象。这这里里不不能能用用msg,因因为为文文本本区区没没有有坐坐标标系系。后后两两个个参参数数是是鼠鼠标标单单击击的的x和和y坐标,它们决定了弹出菜单的显示位置。坐标,它们决定了弹出菜单的显示位置。注意:注意:在创建的窗口中不支持在创建的窗口中不支持Windows系统中的复系统中的复制、粘贴、剪切命令,但可直接将程序文件中的文制、粘贴、剪切命令,但可直接将程序文件中的文字打印到窗口中。字打印到窗口中。在在Java中中,能能够够实实现现图图形形用用户户界界面面的的类类库库有有两两个个:java.awt和和javax.swing。前前者者称称为为抽抽象象窗窗口口工工具具库库(Abstract Windows Toolkit,AWT),从从JDK 1.1开开始始提提供供,第第8章章和和本本章章前前面面介介绍绍的的图图形形用用户户界界面面组组件件都都是是基基于于AWT的的。后后者者是是Java基基础础类类库库(Java Foundation Classes,JFC)的的一一个个组组成成部部分分,它它提提供供了了一一套套功功能能更更强强、数数量量更更多多、更更美美观观的的图图形形用用户户界界面面组组件件。Swing组组件件名名称称和和AWT组组件件名名称称基基本本相相同同,但但以以J开开头头,例例如如AWT按按钮钮类类的的名名称称是是Button,在在Swing中的名称则是中的名称则是JButton。9.3 Swing简介简介 Swing和和AWT的最大差别在于的最大差别在于Swing组件类不带本组件类不带本地代码,因此不受操作系统平台的限制,具有比地代码,因此不受操作系统平台的限制,具有比AWT组件更强的功能。组件更强的功能。Swing按按钮钮类类和和标标签签类类除除了了显显示示文文本本标标题题外外还还可可以显示图像标题。以显示图像标题。可以为可以为Swing容器加上边框。容器加上边框。Swing组组件件能能自自动动适适应应操操作作系系统统的的外外观观,而而AWT组件总是保持相同外观。组件总是保持相同外观。Swing组组件件不不一一定定非非得得是是矩矩形形的的,可可以以把把按按钮钮设设计成圆形。计成圆形。可以调用可以调用Swing组件的方法改变其外观和行为。组件的方法改变其外观和行为。需要注意的是不能在需要注意的是不能在Swing的顶层容器如的顶层容器如JApplet、JFrame中直接加入组件,例如,在中直接加入组件,例如,在JApplet中不能中不能直接调用直接调用add方法加入组件,而应调用方法加入组件,而应调用JApplet的的getContentPane方法获得一个容器,再调用这个容方法获得一个容器,再调用这个容器的器的add方法来加入组件。方法来加入组件。例例9.9 图图像像按按钮钮与与图图像像标标签签应应用用举举例例,结结果果如如图图9.7所示。所示。图图 9.79.3.1 Swing按钮与标签按钮与标签 import javax.swing.*;import java.awt.*;import java.awt.Color;public class W11 extends JApplet Container pane;JPanel panel1,panel2;JButton button1,button2,button3;JLabel label;public void init()pane=getContentPane();panel1=new JPanel(new FlowLayout();panel2=new JPanel(new FlowLayout();ImageIcon icon=new ImageIcon(PreviousArrow.gif,);button1=new JButton(icon);button2=new JButton(new ImageIcon(image/go.GIF);button3=new JButton(new ImageIcon(NextArrow.gif);label=new JLabel(图图像像标标签签,new ImageIcon(Candl02.gif),SwingConstants.CENTER);pane.setBackground(new Color(255,255,204);panel1.setBackground(new Color(255,255,204);panel2.setBackground(new Color(255,255,204);button1.setToolTipText(向上翻页按钮向上翻页按钮);button2.setToolTipText(跳转按钮跳转按钮);button3.setToolTipText(向下翻页按钮向下翻页按钮);pane.add(panel1,BorderLayout.NORTH);pane.add(panel2,BorderLayout.SOUTH);panel1.add(button1);panel1.add(button2);panel1.add(button3);panel2.add(label);上上例例中中使使用用了了Swing的的4个个组组件件:JApplet、JPanel、JButton、JLabel,另外还用到了容器类另外还用到了容器类Container。JApplet需需要要自自建建容容器器以以便便把把组组件件添添加加到到容容器器对对象象中中,默默认认布布局局为为边边界界布布局局。程程序序首首先先定定义义了了容容器器对对象象pane,并并在在init方方法法中中调调用用getContentPane方方法法创创建建了了这这个个容容器器对对象象,这这样样才才能能将将其其他他组组件件加加入入到到JApplet中中。然然后后创创建建了了2个个面面板板对对象象并并指指定定为为顺顺序序布布局局,创创建建了了3个个按按钮钮对对象象并并通通过过ImageIcon生生成成按按钮钮图图标标。最最后后创创建建了了一一个个既既有有文文字字又又有有图图标标的的标标签签对对象象,指指定定标标签签位位置置在在显显示示区区的的中中心心,文文字字紧紧跟跟在在图标后面。图标后面。Swing按按钮钮除除了了可可以以显显示示图图像像外外,还还可可以以显显示示文文字字提提示示。程程序序调调用用了了setToolTipText方方法法分分别别为为每每个个按按钮钮设设定定了了文文字字提提示示,这这样样,当当鼠鼠标标指指向向按按钮钮时时就就会显示出文字提示。会显示出文字提示。在在其其他他方方面面,如如设设定定颜颜色色、设设定定布布局局方方式式、添添加加组组件件以以及及组组件件事事件件响响应应等等,JApplet和和Applet没没有有大大的差别。的差别。其中使用的其中使用的gif文件要事先准备好,如果放在与程序文件要事先准备好,如果放在与程序相同的路径下,可以直接引用,否则要注意添加路相同的路径下,可以直接引用,否则要注意添加路径。径。Swing中的工具栏是一个很有用的组件,它可以显中的工具栏是一个很有用的组件,它可以显示文字或图像按钮,把一些常用的操作命令提供给示文字或图像按钮,把一些常用的操作命令提供给用户。例用户。例9.10介绍了如何创建工具栏并加入图像按介绍了如何创建工具栏并加入图像按钮。钮。9.3.2 Swing工具栏工具栏 例例9.10 工具栏与文本区应用示例,结果如图工具栏与文本区应用示例,结果如图9.8所示。所示。import javax.swing.*;import java.awt.*;import java.awt.event.*;public class W12 extends JFrame implements ActionListener JButton button1,button2,button3;JToolBar toolBar;JTextArea textArea;JScrollPane scrollPane;JPanel panel;public W12()super(工具栏按钮工具栏按钮);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););button1=new JButton(new ImageIcon(left.gif);button2=new JButton(new ImageIcon(go.gif);button3=new JButton(new ImageIcon(right.gif);button1.addActionListener(this);button2.addActionListener(this);button3.addActionListener(this);toolBar=new JToolBar();toolBar.add(button1);toolBar.add(button2);toolBar.add(button3);textArea=new JTextArea(6,30);scrollPane=new JScrollPane(textArea);panel=new JPanel();setContentPane(panel);panel.setLayout(new BorderLayout();panel.setPreferredSize(new Dimension(300,150);panel.add(toolBar,BorderLayout.NORTH);panel.add(scrollPane,BorderLayout.CENTER);pack();show();public void actionPerformed(ActionEvent e)String s=;if(e.getSource()=button1)s=左按钮被单击左按钮被单击n;else if(e.getSource()=button2)s=中按钮被单击中按钮被单击n;else if(e.getSource()=button3)s=右按钮被单击右按钮被单击n;textArea.append(s);public static void main(String args)new W12();图图 9.8例例9.10是一个是一个Java 应用程序,使用了应用程序,使用了Swing的的6个组个组件:件:JFrame、JButton、JToolBar、JTextArea、JScrollPane、JPanel。W12的的构构造造方方法法完完成成了了大大部部分分工工作作。首首先先创创建建3个个按按钮钮,指指定定相相应应的的图图像像并并注注册册事事件件监监听听器器。然然后后创创建建了了一一个个工工具具栏栏并并将将3个个按按钮钮添添加加进进去去。Swing中中的的文文本本区区不不能能自自动动出出现现滚滚动动框框,常常将将它它和和JScrollPane连用,以连用,以textArea为参数创建滚动框对象。为参数创建滚动框对象。和和JApplet一一样样,JFrame也也是是顶顶层层容容器器,因因此此程程序序创创建建了了一一个个JPanel对对象象作作为为基基本本容容器器来来包包容容其其他他组组件件,并并通通过过setContentPane方方法法将将该该对对象象指指定定为为JFrame的的基基本本容容器器。JPanel 的的setPreferredSize方方法法可可将将面面板板区区域域设设定定为为更更合合适适的的大大小小,使使文文本本区区自自动动出出现现滚滚动动框框。另另外外,pack方方法法也也是是必必不不可可少少的的,它使得窗口按照组件的大小来调整自身的大小。它使得窗口按照组件的大小来调整自身的大小。actionPerformed方法是对工具栏按钮单击事件的响方法是对工具栏按钮单击事件的响应,单击按钮后,对应的字符串将显示在文本区中。应,单击按钮后,对应的字符串将显示在文本区中。9-1 创创建建一一个个窗窗口口对对象象时时要要注注意意什什么么?使使用用最最简简洁洁的方法创建一个可关闭的窗口。的方法创建一个可关闭的窗口。9-2 模模 仿仿 例例 9.2将将 例例 8.18使使 用用 MouseHandler和和MouseMotionHandler事件适配器来实现。事件适配器来实现。9-3 向向窗窗口口添添加加菜菜单单有有哪哪几几个个步步骤骤?设设计计一一个个有有“退出退出”命令的菜单并添加到窗口。命令的菜单并添加到窗口。9-4 创创建建一一个个窗窗口口,要要求求有有“退退出出”按按钮钮、菜菜单单“退出退出”命令,同时窗口本身的关闭按钮也起作用。命令,同时窗口本身的关闭按钮也起作用。习题习题 9-5 如如何何为为菜菜单单添添加加分分隔隔线线?如如何何创创建建复复选选菜菜单单项项?如何创建多级菜单?如何创建多级菜单?9-6 创创建建一一个个带带有有多多级级菜菜单单和和复复选选框框菜菜单单的的窗窗口口,并在菜单中加入分隔线。并在菜单中加入分隔线。9-7 创创建建一一个个窗窗口口,单单击击“提提示示”按按钮钮可可出出现现一一个个写有写有“你好!你好!”文字的对话框。文字的对话框。9-8 将第将第9-7题按题按Swing特性改写。特性改写。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 生活常识


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!