基于java的图形用户界面设计内容摘要:

③图像浏览区 ①操作区 ④图像窗口 8 面的外观风格的切换,只能有一种外观风格被选择,因此使用 JRadioButtonMenuItem 和ButtonGroup。 操作区内另有工具栏, 使用 JToolBar,为了让工具栏能更好地被拖出和放回原位,而不影响界面的布局,使用自定义的类 JToolBarPanel,该类是 JPanel 的子类,并实现了ContainerListener 接口,当容器内容因为有某一组件被加入或删除而发生改变时,该监听器的相关方法将被触发,以调整布局。 在工具栏上,用户能通过按钮完成常用的操作。 为了使用户界面更加整洁,美观,使用了由 JButton 扩展来的自定义类 JFancyButton,该类实现的按钮,不仅具有其父类的可以设置一般状态、鼠标经过状态、鼠标点击状态的不同图标, 还去掉了普通按钮具有的边框。 主界面除操作区的以下部分,为了使界面更加灵活,使用了 JSplitPane,这样树形查看区就可以被收起,用户就有更大的图像浏览区。 树形区域使用自定义类 TreeExplorer, 为了在树中只列出 gif、 jpg、 png格式的文件,使 用自定 义类 ImageFilter(实 现接口 )。 图 像浏览 区使用JDesktopPane,在其实例的最底层加入了 JLabel的一个只带图标的对象,作为图像浏览区的背景。 图像窗口由 JInternalFrame 扩展的自定 义类 JImageFrame 实现。 因为该窗口是用来打开图像文件的,所以此自定义类中用到了 JScrollPane、 File、 Image。 另外,打开文件的对话框使用了 JFileChooser,为了在选择文件中只显示 gif、 jpg、png格式的文件,使用了 demo/jfc下 FileChooserDemo中的 ExampleFileFilter( 继承于 )。 “关 于”对话 框的弹出 直接用()方法完成。 图5标明了以上所提组件在界面上的位置安排: 9 图5 图形界面详细布局安排(主类 JImageViewer 所使用组件) (四) 主要模块功能及实现 实现这个程序,共定义了9个类(不计内部类)。 它们分别是 : 主类 JImageViewer、JToolBarPanel、 JFancyButton、 JSplashWindow、 ExampleFileFilter、 TreeExplorer、JImageFrame、 ImageFilter 和 ExampleFileFilter。 其中 ExampleFileFilter 是从 JDK 中demo/jfc/FileChooserDemo 的源 文件 中借用 的, JToolBarPanel 则借 鉴于 JDK 中demo/jfc/swingset2 中的 中定义的 ToolBarPanel 类。 它们之间的关系如图6所示: 图6 各模块关系图 说明 :上图中 A B 表示 类 A 使用类 B 其中主要模块的功能及实现介绍如下(详细代码实现请见附录): 1 . JImageViewer 建立用户界面外观, 使用监听器 LnFListener 响应用户对界面外观的选择,实现ActionListener 接口,对“退出”、“关于”操作作出响应。 另外,其中定义了内部类OpenListener、 CloseallListener、 TitleActionListener、 BrowseListener、 ScaleListener,它们都实现了 ActionListener,分别处理“打开”(文件)、“关闭所有图像窗口”、“平铺窗口”、“前后翻页”和“放大缩小”的命令。 2 . JImageFrame 显示图像,继承 JInternalFrame,其结构如下: 属性: Image image。 //当前图像 File file。 //当前图像文件 JScrollPane jsp。 //滚动窗,当图像过大时,可以滚动滚动条来查看 JImageViewer JToolBarPanel JFancyButton JImageFrame JSplashWindow TreeExplorer ExampleFileFilter ImageFilter LnFListener JPanel JMenuBar JToolBarPanel JToolBar JFancyButton JSplitPane TreeExplorer JLabel JDesktopPane JImageFrame 说明 :边框色与所用组件对应如下(粗体表示标准组件 ,粗斜体表示扩展的组件) 10 JLabel jlab。 //只含图标,显示图片 方法: public void setImage(File f) //更新当前图片为图片文件 f public File getImage() //得到当前图片,并返回 public void scaleImage(double p) //按照参数 p的比例更改图片大小 public void reLoad() //重新加载当前图片文件 3 . TreeExplorer 一个浏览面板,以树的形式浏览磁盘上的图像文件,继承 JScrollPane。 其中定义了4个内部类: ①F ileNode:定义文件节点类。 包含了一个 File成员对象,所有操作都是围绕着这个 File对象来进行的。 其中的主要方法 expand(),是对节点展开,获取子节点的具体实现。 ② MyRenderer: 继承 TreeCellRenderer ( 渲 染 器 接 口 ) 的 默 认 实 现 类DefaultTreeCellRenderer。 对树中节点的图标进行了设置,不同状态的节点使用不同的图标,同时增加了 tooltip支持。 ③ MyExpansionListener:节点展开事件监听器,实现 TreeExpansionListener。 对节点展开事件进行了处理,因为展开节点,获取节点信息时,处理的时可能会比较长,为了不让界面的操作冻结,其中使用了线程。 ④ MySelectionListener:选择事件监听器,实现 TreeSelectionListener。 当树中节点被选中时,触发选择事件,将当前路径的文件,赋给属性 currentfile,以便将当前树中选中的文件传递给其它类。 4 . JFancyButton 无边框按钮,接收用户命令,触发监听器,继承 JButton。 通过以下三条语句去掉按钮边框: setBorderPainted(false)。 setBorder(new EmptyBorder(new Insets(0,0,0,0)))。 setContentAreaFilled(false)。 5 . LnFListener 对外观进行设置,实现 ActionListener 接口,使用以下语句: (lnfName)。 (frame)。 五 程序运行情况说明 程序能正常运行,能完成即定的功能需求。 程序执行后,欢迎屏幕如图7;进入主界面,打开三幅图像后,进行“平铺”操作的效果如图8。 图8是在 JavaMetal 风格下,点击 Face 菜单中的选项可切换到 Windows 或 Mac OS的外观风格。 界面中 对功能键都给出了相应的提示和快捷键。 程序在使用“树”获取磁盘文 11 件信息时,运行有点慢,应该是由于 Java 是解释型语言所致。 另外,前后翻页的功能在代码实现上方法不太好,导致结果不是很稳定,不过还是能够达到按序浏览某文件夹内所有图像的效果,这个文件夹是当前得到焦点的图像窗口中所显示的图像文件所在的文件夹。 图7 欢迎屏幕 图8 Metal 风格下的界面(平铺了三个图像窗口) 六 小结 本 次 毕业设计, 讨论了图形用户界面设计的重要性,如何用 Java Swing 设计一个良好的图形用户界面,并 成功 实现了一个图像浏 览器。 这个图像浏览器 运行良好,能打开 gif、jpg、 png 格式的文件,完成前一张、后一张、放大、缩小等操作。 由于自己水平有限,这个图像浏览器功能比较简单,还有许多地方需要完善。 如对于树 12 的选择事件,如果当用户打开其中某一文件夹节点时,在右边的图像浏览区能够显示出该文件夹内的所有图像的缩略图,双击缩略图,就能打开图像。 这样会更方便用户对文件的选择。 另外,打开文件的对话框,最好也能有预览的功能。 既然是图像浏览器,最好还附带一些对图像的处理功能。 致谢 参考文献 [1]印旻 . Java语言与面向对象程序设计.北 京:清华大学出版社, 2020. 183~ 184 [2]Marc Loy, Robert Eckstein, Dave Wood 等. Java Swing(第二版 ).北京:清华大学出版社, 2020. 1~ 682 [3]邵荣. Java编程实践指南.北京:清华大学出版社, 2020. 90~ 120 [4]Kenh F. Krutsch, David S. Cargo, Virginia Howlett. Java用户界面编程指南.北京:电子工业出版社, 2020. 10~ 30 [5]James Hobart.出色图形用户界面(GU I)设计规范. 2020 [6]张晨,付冰,赵军等. Java2应用编程 150例.北京:电子工业出版社, 2020. 9~ 11 [7]张洪斌. Java程序设计白事通.北京:清华大学出版社, 2020. 205~ 322 [8]唐大仕. Java程序设计.北京:北方交通大学出版社, 2020. 295~ 303 [9]谭浩强. Java编程技术.北京:人民邮电出版社, 2020. 183~ 185 [10]Rogers Cadenhead, Laura Lemay. 21天学通 Java2(第三 版).北京:人民邮电出版社,2020. 440~ 447 [11]nkoffe.分享 Swing 学习的一些经验. 2020 附录 主要部分源代码如下: // import .*。 import .*。 import .*。 import .*。 import .*。 public class JImageViewer extends JFrame implements ActionListener{ JPanel toppane。 JDesktopPane desktop。 JLabel backgr。 JSplitPane jsp。 TreeExplorer treeEx。 int internalX。 13 int internalY。 public JImageViewer(){ //构造函数 super(Vision)。 ImageIcon icon=new ImageIcon(images/)。 setIconImage(())。 Container contentPane=getContentPane()。 //JFrame 内容窗格 //======================menu======================。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。