您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > Java程序设计10图形用户界面
计算机科学与技术学院赵志崑zhaozk@sdufe.edu.cn赵志崑GUI组件概述•awt:AbstractWindowToolkit——抽象窗口工具集–从Java1.0中出现。–awt处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台(如windows,Linux)上的本地GUI处理。•每个平台提供的图形界面元素都不一样。•不同平台上的awt库存在不同Bug。–awt的事件处理模型在Java1.1版进行了大的改动后,到目前的版本基本没变。•swing:–Java2.0中出现。–Swing组件全部是由纯Java编写的,用户界面元素都绘制在空白窗口上,绘制和行为都由swing类自己完成。各平台之间唯一不同的就是最外层窗口的创建。•总结:–尽管awt的用户界面组件仍然可以用,但是建议最好不要使用。–现在编写Java图形界面程序,使用swing组件+awt事件处理模型。赵志崑swing概述•swing比awt功能更强、使用更方便。–awt组件库只能提供各个平台都有的元素。而swing没有这个限制,因此组件更丰富。–swing组件都是Java自己绘制和管理,因此在不同平台上有相同的观感。–swing对底层平台依赖更少,因此出现bug的可能性更少。–swing还提供了多种组件观感可供选择,因此可以开发出与具体平台观感基本相同的界面。–swing还提供了一个平台无关的观感——Metal,建议使用。赵志崑创建一个窗口•Java中,顶层窗口称作框架。–swing中实现框架功能的类是JFrame。–swing组件类的名称一般以J开头,以区别于原awt组件。–这个窗口是由操作系统绘制和管理的。–javax开头的包在Java1.1中是扩展包,在2.0已经是核心包的一部分。见Hello.javaimportjavax.swing.*;publicclassHello{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setVisible(true);}}通过调用JFrame的方法可以设置窗口的属性。frame.setSize(300,200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(newJLabel(HelloWorld!));赵志崑创建窗口——由JFrame派生子类•根据面向对象的思想,创建窗口要由JFrame派生一个子类–这种方式使得代码更为清晰、简洁、灵活。见HelloWin.javaimportjavax.swing.*;publicclassHelloWinextendsJFrame{publicstaticvoidmain(String[]args){JFramehelloFrame=newHelloWin();helloFrame.setVisible(true);}publicHelloWin(){setSize(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().add(newJLabel(HelloWorld!));}}见Hello.javaimportjavax.swing.*;publicclassHello{publicstaticvoidmain(String[]args){JFrameframe=newJFrame();frame.setSize(300,200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(newJLabel(HelloWorld!));frame.setVisible(true);}}赵志崑改变JFrame外观的常用方法•改变框架的外观,要使用JFrame的方法。ObjectComponentContainerJComponentJPanelWindowFrameJFrame继承自FramepublicvoidsetTitle(Stringtitle):设置标题publicvoidsetIconImage(Imageimage):设置图标publicvoidsetMenuBar(MenuBarmb):设置菜单publicvoidsetResizable(booleanresizable):设置可变大小publicvoidsetState(intstate):设置窗口状态继承自ComponentpublicvoidsetLocation(intx,inty):设置位置publicvoidsetSize(intwidth,intheight):设置尺寸publicvoidsetBounds(intx,inty,intwidth,intheight)赵志崑获取屏幕信息•问题:要使窗口大小为屏幕四分之一,并且位于中央。•解决:用Toolkit类的方法获得屏幕分辨率信息。见HelloWin1.javaimportjavax.swing.*;importjava.awt.*;publicclassHelloWin1extendsJFrame{publicHelloWin1(){Toolkitkit=Toolkit.getDefaultToolkit();DimensionscreenSize=kit.getScreenSize();setSize(screenSize.width/2,screenSize.height/2);setLocation(screenSize.width/4,screenSize.height/4);Imageimg=kit.getImage(graph.bmp);setIconImage(img);setTitle(Hello);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}screenSize.heightscreenSize.widthYLocationXLocation赵志崑添加菜单•为框架添加菜单需要以下步骤:–创建一个JMenuBar对象,用Frame的setJMenuBar方法设置为框架菜单。–创建JMenu对象,添加到JMenuBar对象中。–创建JMenuItem对象,添加到JMenu对象中。见MenuWin.javaJMenuBarmainMenu=newJMenuBar();setJMenuBar(mainMenu);JMenufileMenu=newJMenu(File);mainMenu.add(fileMenu);JMenuItemnewItem=newJMenuItem(New);newItem.setAccelerator(KeyStroke.getKeyStroke(newCharacter('N'),InputEvent.CTRL_MASK));fileMenu.add(newItem);fileMenu.add(newJMenuItem(Open,'O'));fileMenu.add(newJMenuItem(Save));fileMenu.addSeparator();fileMenu.add(newJMenuItem(Close));JMenueditMenu=newJMenu(Edit);mainMenu.add(editMenu);editMenu.add(Cut);JMenuBarJMenuJMenuItemAccelerator(加速器)快捷键赵志崑高级菜单功能•为菜单项添加图标–JMenuItem(String,Icon)–ImageIcon类表示图标对象•复选框和单选按钮菜单–JRadioButtonMenuItem–JCheckBoxMenuItem•多级菜单–JMenu.add(JMenu)•菜单项的启用和禁用–JMenuItem.setEnabled(Boolean)•菜单项的删除–JMenu.remove(int);程序见MenuWin1.java20行:newItem.setIcon(newImageIcon(graph.jpg));25行:JMenuItemsaveItem=newJRadioButtonMenuItem(Save);36行:editMenu.add(newJCheckBoxMenuItem(Cut));47行:editMenu.add(optionMenu);40行:pasteItem.setEnabled(false);49行:optionMenu.remove(1);赵志崑GUI组件•程序与用户的交互,通过窗口中的组件来完成。–窗口中的一个组件就是一个对象。swing包中常用GUI组件包括:JButton:按钮JCheckBox:可选框JComboBox:组合框JLabel:标签JList:列表JPasswordField:密码域JProgressBar:进度条JRadioButton:单选按钮JScrollBar:滚动条JTable:表格JTextArea:文本区JTextField:文本域JTree:树型框(Components.java)赵志崑各组件的常用方法•各组件的外观和内容都是由组件的参数决定的,如按钮上的文字等。设置和读取组件的普通参数:–改变各组件的参数使用:set***(***)方法。–读取各组件的参数使用:get***(***)方法。•带有列表内容的组件,如组合框,其列表内容一般通过下面的方法设置和读取:–添加一项:addItem(***)方法。–删除一项:removeItem(***)方法。•具体的方法还需查阅相关帮助文档。赵志崑向窗口中添加组件•组件要添加到窗口的内容容器中。见ContentTest.javaimportjavax.swing.*;importjava.awt.*;publicclassContentTestextendsJFrame{publicstaticvoidmain(String[]args){JFramehelloFrame=newContentTest();helloFrame.setVisible(true);}publicContentTest(){setSize(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ContainercontentPane=getContentPane();contentPane.add(newJLabel(HelloWorld!));}}ContentPane赵志崑见LocationTest.javapublicclassLocationTestextendsJFrame{publicLocationTest(){……ContainercontentPane=getContentPane();contentPane.setLayout(null);JLabellabel1=newJLabel(Number1:);label1.setLocation(10,10);label1.setSize(80,20);JTextFieldtextField1=newJTextField();textField1.setBounds(90,10,100,20);JButtonbutton1=newJButton(OK);button1.setBounds(210,10,60,20);contentPane.add(label1);contentPane.add(textField1);contentPane.add(button1);}}安排组件位置•Java中有两种方法安排组件在窗口中的位置:–使用组件在窗口中的绝对坐标和大小。•无
本文标题:Java程序设计10图形用户界面
链接地址:https://www.777doc.com/doc-2881259 .html