Java程序设计 5.2 图形编程之swing_第1页
Java程序设计 5.2 图形编程之swing_第2页
Java程序设计 5.2 图形编程之swing_第3页
Java程序设计 5.2 图形编程之swing_第4页
Java程序设计 5.2 图形编程之swing_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 图形编程之SwingGUI程序 简介GUI,Graphic User Interface,图形用户界面带给用户一种更直观、友好的界面提供一种更友好的交互方式用户可以通过鼠标点击、拖动、键盘控制等更灵活的方式进行应用操作。 GUI包和简单GUI程序1.java.awt包 Java语言在java.awt包中提供了大量地进行GUI设计所使用的类和接口,包括绘制图形、设置字体和颜色、控制组件、处理事件等内容,AWT是Java语言进行GUI程序设计的基础。2. javax.swing包Swing包是Java基础类库(Java Foundation Classes,JFC)的一部分。Swing提供

2、了从按钮到可分拆面板和表格的所有组件。GUI包和简单GUI程序Swing组件是Java提供的第二代GUI设计工具包,它以AWT为基础,在AWT内容的基础上新增或改进了一些GUI组件,使得GUI程序功能更强大,设计更容易、更方便。AWT组件和对应的Swing组件,从名称上很容易记忆和区别。AWT的框架类、面板类、按钮类和菜单类,被命名为Frame、Panel、Button和MenuSwing对应的组件类被命名为JFrame、JPanel、JButton和Jmenu,与AWT组件相比,Swing组件的名前多一个“J”AWT 组件在java.awt包中,而Swing组件在javax.swing包中基

3、于Swing的界面设计JFrame的继承结构 JFrame类的继承层次图 java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame Jframe 框架在Java中,顶层窗口称为框架。在AWT库中,对应于框架的类是Frame,在Swing库中,相应的类是JFrame。JFrame类扩展了Frame类。框架是一个容器,我们可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序import javax.swing.*

4、;public class FirstFrame public static void main(String args) SimpleFrame frame = new SimpleFrame(); /设置用户关闭框架时的响应动作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /显示该框架 frame.setVisible(true); class SimpleFrame extends JFramepublic SimpleFrame() /设置框架大小 setSize(WIDTH, HEIGHT);public static

5、final int WIDTH = 300;public static final int HEIGHT = 200; 显示一个空框架类 JFrameJFrame 是带有标题、边界、菜单的顶层windows窗口, JFrame的默认布局为 BorderLayout。 对JFrame添加组件有两种方式:通过add( )方法直接添加组件到JFrame使用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(组件)类 JFrame主要方法 getContentPane() 返回此窗体的 contentPane 对象(内

6、容面板,组件要添加到此) getJMenuBar() 返回此窗体上设置的菜单栏。 setIconImage(Imageimage) 设置要作为此窗口图标显示的图像。setJMenuBar(JMenuBarmenubar) 设置此窗体的菜单栏。 类 JFrame其它方法 public void setBounds(int a,intb,int width,int heigth)public void setSize(int width,int heigth)public void setLocation(int x,int y)public void setVisible(boolean b)p

7、ublic void setResizable(boolean b)/是否允许调大小setDefaultCloseOperation()方法的参数DO_NOTHING_ON_CLOSE:不执行任何操作。HIDE_ON_CLOSE:调用后自动隐藏该窗体。 DISPOSE_ON_CLOSE:调用后自动隐藏并关闭该窗体。 EXIT_ON_CLOSE:使用 System exit 方法退出应用程序。除JFrame外的其它顶层容器JDialog:和JFrame类似,只不过JDialog是用来设计对话框JApplet:用来设计可以在嵌入在网页中的Java小程序JWindow:不带修饰的窗体,无最大、最小按

8、钮和标题栏基于Swing的界面设计流程(重点)(1)引入合适的包和类一般的Swing GUI程序应包含三个import语句,分别表示引入awt包、awt.event包和swing包。 (2)设置一个顶层的容器(3)根据需要,使用缺省的布局管理器或设置其它的布局管理器(5)定义组件并将它们添加到容器(6)对组件或事件编码布局管理器(重点掌握和理解布局的方法)在容器中所有组件的布局(位置和大小)由布局管理器来控制。Java语言中提供了FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等多种布局管理器。每种容器都有自己缺省的布局管理

9、器,JFrame的缺省布局管理器是BorderLayout,如果不希望使用缺省的布局管理器,则可使用setLayout()方法来改变缺省的布局管理器。 FlowLayoutFlowLayout组件的放置规律是从上到下、从左到右进行放置,如果当前行已放置不下该组件,则放置到下一行的最左边。 FlowLayout布局模式:setLayout(new FlowLayout();/默认居中setLayout(new FlowLayout(FlowLayout.RIGHT);/右对齐BorderLayout BorderLayout布局把界面分成5个区域:North,South,East,West和Ce

10、nter,每个区域只能放置一个组件。 当界面的大小发生变化时,其变化规律为:组件的相对位置不变,大小发生变化。 GridLayoutGridLayout布局管理器将整个界面划分成N行,M列的网格,每个网格的大小相同。布局时,按照组件加入的顺序优先考虑按行布局,当一行布局满之后再布局下一行 Frame f = new Frame(GridLayoutDemo);f.setLayout(new GridLayout(2,3); /容器平均分成2行3列共6格GridLayout布局模式public static void main(String args)ch52 f=new ch52();Cont

11、ainer contentPane=f.getContentPane();contentPane.setLayout(new GridLayout(4,5);for (int i=1;i=4;i+)for (int j=1;j=5;j+)contentPane.add(new JButton(i+行+j+列);f.setVisible(true);GridBagLayoutGridBagLayout同GridLayout一样,在容器中以网格形式来管理组件,但GridBagLayout功能要来得强大得多。1、GridBagLayout管理的所有行和列都可以是大小不同的;2、GridLayout把

12、每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域。GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints。CardLayout将容器中的每个组件看作一张卡片。一次只能看到一张卡片,容器则充当卡片的堆栈。当容器第一次显示时,第一个添加到 CardLayout 对象的组件为可见组件。 add (Componentcomp):添加组件到容器first(Containerparent) 翻转到容器的第一张卡片。last(Containerparent) 翻转到容器的最后一张卡片。next(Con

13、tainerparent) 翻转到容器的下一张卡片。previous(Containerparent) 翻转到前一张卡片。show(Containerparent, Stringname)翻转到具有指定 name 的组件。NULL布局控件指定位置显示,利用如下方法输出Public void setBounds(int x,int y,int width,int height)即自行设定窗体和控件的大小和位置Swing常用组件(重点)(1) 顶层容器JFrame、JApplet、JDialog、JWindows(2) JPanel面板容器JPanel是一种添加到其他容器使用的容器组件,可将组件添

14、加到JPanel,然后再将JPanel添加到某个容器。默认是FlowLayout布局管理器有效的利用Panel可以使版面管理更为容易。Swing常用组件(3)JTabbedPaneJTabbedPane继承于javax.swing.JComponent,它是一组带标签的面板,每个面板可以存放组件,因此JTabbedPane是一容器组件。addTab ( Stringtitle, Componentcomponent)添加一个由 title 表示,且没有图标的 component。 getSelectedIndex()返回当前选择的此选项卡窗格的索引。Swing常用组件(4) 其它组件 a) J

15、Label b) JButton c) JTextField d) JTextArea e) JPasswordField f) JRadioButton g) JCheckButton h) JSlider 滚动条 i) JList J) JFileChooser k) JScollBar l) JMenuBar, JMenu, JMenuItem, JCheckMeunItem, JRadioMenuItem, JPopupMenu m) JOptionPane模式对话框Java的事件处理机制(重点)Event(事件)事件,就是发生在用户界面上的用户交互行为所产生的一种效果。Event S

16、ource(事件源)产生事件的对象。Event handler/Listener(事件处理器)接收事件对象并对其进行处理的方法。图示说明事件处理示例import java.awt.*;import java.awt.event.*;public class TestButton public static void main(String args)Frame f = new Frame(Test);Button b = new Button(Press Me!);b.addActionListener(new ButtonHandler();f.setLayout(new FlowLayou

17、t();f.add(b);f.setSize(200,100);f.setVisible(true);事件处理示例class ButtonHandler implements ActionListenerpublic void actionPerformed(ActionEvent e)System.out.println(Action occurred);(1)对于某种类型的事件XXXEvent, 定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;例如:ActionEventActionListener(2)事件源中产生事件后,必须注册相应于该类事件的监听器,

18、使用addXXXListener(XXXListener ) 来注册监听器。(3)事件发生后,产生表示特定事件的事件对象,事件对象被传递给已经注册的事件监听器,调用监听器中的特定方法处理事件 进行事件处理的一般方法事件体系结构FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObject事件类型接口名要实现方法ActionEventActionListener

19、actionPerformed(ActionEvent) ItemEventItemListeneritemStateChanged(ItemEvent) MouseEventMouseMotionListener mouseDragged(MouseEvent) mouseMoved(MouseEvent) MouseEventMouseListener mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) 事件类与对应的监听器接口 KeyEven

20、tKeyListener keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent) FocusEventFocusListener focusGained(FocusEvent) focusLost(FocusEvent) AdjustmentEventAdjustmentListener adjustmentValueChanged (AdjustmentEvent) ComponentEventComponentListener componentMoved(ComponentEvent) componentHidden(C

21、omponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) WindowEventWindowListenerwindowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)WindowDeiconified(WindowEvent)WindowClosed(WindowEvent)WindowActivated(WindowEvent)WindowDeactivated(WindowEvent)Cont

22、ainerEventContainerListenercomponentAdded(ContainerEvent)ComponentRemoved(ContainerEvent)TextEventTextListenerTextValueChanged(TextEvent)事件处理方式事件处理中最关键的是通过addXXXListener(XXXListener ) 来注册监听器利用监听器类实现事件处理利用内部类实现事件处理利用匿名内部类实现事件处理键盘事件在按下或释放键盘上的一个键时,将生成键盘事件。keyEvent 类包含用来表示按下或点击的键的常量。生成 keyEvent 时将调用 key

23、Listener。如果程序需要处理特殊的键,如方向键,需要通过调用keyPressed( ) 方法来处理。public void keypressed(keyEvent k) int keyCode = k.getKeyCode(); if ( keyCode = k.VK_RIGHT & k.isShiftDown() . . . 检测用户是否按下了Shift+右箭头键 键盘事件示例class MyPanel extends Panel public MyPanel() TextField tField = new TextField(20); add(tField); MyKeyAdapt

24、er bAction = new MyKeyAdapter(); tField.addKeyListener(bAction); private class MyKeyAdapter extends KeyAdapter public void keyPressed(KeyEvent kevent) setBackground(Color.blue); repaint(); public void keyReleased(KeyEvent kevent) setBackground(Color.red); repaint(); public void keyTyped(KeyEvent kevent) if (kevent.getKeyChar() = x) System.exit(0); 按下键时背景变为兰色,释放键时背景变为红色,输入字符x时退出程序鼠标事件任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。鼠标事件有两种监听器:MouseListener 和 MouseMotionListener。 需要实现的方法如下: mouseClicked、 mouseEntered、mouseExited mousePressed、mouseReleased

温馨提示

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

评论

0/150

提交评论