[原创]搭建桌面应用程序原型(第二部分)

原创 2004年08月31日 22:45:00

[原创]搭建桌面应用程序原型(第二部分)

设置系统外观

下面的setSystemLookAndFeel()方法调用了javax.swing.UIManager类的setLookAndFeel()方法:
它要求Swing从默认的Metal外观转换为本地外观:

private void setSystemLookAndFeel() {
    try {
        UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
    } catch (UnsupportedLookAndFeelException x) {
        log(x);
    } catch (ClassNotFoundException x) {
        log(x);
    } catch (IllegalAccessException x) {
        log(x);
    } catch (InstantiationException x) {
        log(x);
    }
}


通常,因为setLookAndFeel()参数都有一个可用值所以不会抛出异常。然而用标准日志API任何异常都可以作为严重错误信息被记录:

private static void log(Exception x) {
    Logger.global.severe(x.getMessage());
}


在原型安例中用全局日志是可以的,但是一个产品应该用它自己的日志,保存错误信息在文件中。
创建并显示主要窗口
createFrame()方法创建一个MainFrame实例,并且加载了图片:

private void createFrame() {
    mainFrame = new MainFrame();
    mainPanel = mainFrame.getMainPanel();
    mainPanel.updateSize();
    mainFrame.pack();
    loadImage();
}


updateSize()设置了由getMainPanel()获得的主要面板的合理大小。pack()方法使得主框架调整大小从而让主面板和应用程序工具栏调整到合适的大小。注意到getMainPanel()和updateSize()方法是MainFrame和MainPanel类实现的应用方法。pack()方法是从java.awt.Window中继承下来的。
showFrame()方法显示应用程序的主框架并且调用主panel的requestFocus()方法。没有调用requestFocus(),焦点将被工具栏中是缩放下拉框获得,这个组件不是框架的主要组件。当应用程序开始的时候,它的主要组件应该获得焦点,即使主要panel没有处理任何键盘事件。
在窗口关闭的时候调用setDefaultCloseOperation(),禁用这个方法的默认动作而是传递DO_NOTHING_ON_CLOSE作为参数。showFrame()方法注册自己拥有的窗口监听器以便处理窗口关闭事件。当用户关闭主要框架,监听器保存一个做过注释的图片,释放框架所占用的资源并且用System.exit(0)结束应用程序的执行。

private void showFrame() {
     mainFrame.setDefaultCloseOperation(
         MainFrame.DO_NOTHING_ON_CLOSE);
     mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
             saveImage();
             mainFrame.dispose();
             System.exit(0);
         }
     });
     mainFrame.show();
     mainPanel.requestFocus();
}


加载和保存图片

一个完成的产品将用文件对话框去加载一个源图片并且保存一个注释过的图片。在观念上,“文件打开”对话框将让拥护预览图片,“文件保存”对话框将允许他们去提供不同的参数,例如保存图片的压缩质量。Swing的标准文件对话框是基于组件JFileChooser,这个组件能够通过setAccessory()方法进行自定义,让你在文件对话框上加载你的组件。
在原型安例中,注意力应该在主要功能上。因此,原型通过从命令行获得加载和保存路径代替用自定义的文件对话框。javax.imageio.ImageIO类简单的read()和write()方法被用于加载和保存图片。注意,Image IO API让你知道哪种图象格式是支持的,并且你能设置例如压缩质量的参数。对于自定义文件对话框也将需要这些性质。
loadImage()方法读取一个图片文件,路径是由命令行第一个参数提供的,并且设置主要panel的背景图片:

private void loadImage() {
    if (args.length >= 1)
        try {
            File file = new File(args[0]);
             BufferedImage image = ImageIO.read(file);
             mainPanel.getPaintView().getModel().setBackImage(image);
        } catch (IOException x) {
             log(x);
        }
}


saveImage()方法获得一个主要panel的注释过的图片,并且把这个图片保存到一个文件里,路径是由命令行提供的第二个参数给出的:

private void saveImage() {
     if (args.length >= 2)
         try {
             File file = new File(args[1]);
             String name = file.getName();
             int k = name.lastIndexOf('.') + 1;
             String ext = name.substring(k);
             BufferedImage image
                 = mainPanel.getAnnotatedImage();
             ImageIO.write(image, ext, file);
         } catch (IOException x) {
             log(x);
         }
}

推荐两个界面原型设计工具--GUIDesignStudio 和 Mockups For Desktop

推荐两个界面原型设计工具--GUIDesignStudio 和 Mockups For Desktop 前段时间,有幸参加一次高级软件架构师的培训,授课老师介绍了两个很好玩的界面原型设计工具:GUI...
  • sdvch
  • sdvch
  • 2015年04月24日 09:52
  • 5894

为什么用Python开发桌面应用程序

为什么用Python开发桌面应用程序 为什么用Python开发桌面应用程序 1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是...
  • duck_arrow
  • duck_arrow
  • 2015年03月26日 15:58
  • 12798

用HTML开发Windows桌面应用程序

转载自:http://blog.csdn.net/xiaoaiai/article/details/46043077  如果要说明这个题目上的问题,就先要说一下,软件开发的种种方式,从最初的...
  • ytlcainiao
  • ytlcainiao
  • 2015年05月29日 14:09
  • 6245

Java桌面应用程序

java桌面应用印象因为桌面程序运行在宿主机器上, 所以比如你运行java桌面程序,必然要安装java虚拟机, 也就是相当于在操作系统上再加一层抽象, 这与直接调用api的桌面程序效率相比,或多...
  • oneqinglong
  • oneqinglong
  • 2017年04月13日 15:27
  • 4823

1.2编写C++应用程序&1.3学习桌面应用程序的编程

特此声明:以下内容出自《Visual C++  2013 入门经典》(第七版),我只是摘抄出来。 1.Visual C++可以开发的应用程序有两大类:桌面应用程序和Windows Store 应用程序...
  • xky1306102chenhong
  • xky1306102chenhong
  • 2017年01月17日 15:05
  • 1072

如何创建一个最简单的Windows桌面应用程序 (C++)

如何创建一个最简单的Windows桌面应用程序 (C++)      最近刚开始学习C/C++开发Windows应用程序,这里将会以零基础的视角把学习过程完全记录下来。如果你也刚刚起步,那本文一定...
  • u011583927
  • u011583927
  • 2017年02月07日 13:23
  • 12340

Web应用程序与桌面应用程序的区别

webdelphi服务器网络internetaccess 如果都是用.net做的话,桌面程序需要开发服务器端和客户端两块程序,电脑都要安装.net framework,b/s形式的话,只用做服务...
  • zkn_CS_DN_2013
  • zkn_CS_DN_2013
  • 2014年01月06日 17:41
  • 3248

坐井观天谈Windows桌面应用程序开发中的MVC架构(一)之个人开发之路

刚刚毕业的时候从第二份工作开始就进入了Windows桌面程序开发中,从此一如侯门深似海,多次徘徊在进入服务器端开发的门口,却始终没能迈进去。刚开是写基于MFC的UI写到崩溃,经常是一个很简单的界面效果...
  • whuavon
  • whuavon
  • 2015年09月12日 14:17
  • 1933

《C#入门经典(第6版)》之如何编写简单的桌面应用程序

1本章内容: ● Visual Studio 2012 的基础知识 ● 如何编写简单的控制台应用程序 ● 如何编写简单的桌面应用程序              VS 是一个庞大的复杂产品,...
  • qinghuawenkang
  • qinghuawenkang
  • 2014年01月24日 10:54
  • 27065

用python创建桌面应用(一)

最近在看一本叫《python项目开发实战的书》,里面有一个项目是创建桌面应用的,比较感兴趣,所以就写下来。当做是一个读书笔记吧。下面我所使用的代码是原书的代码,如果需要下载请在http://www.w...
  • qq_35170217
  • qq_35170217
  • 2017年04月23日 13:20
  • 3291
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[原创]搭建桌面应用程序原型(第二部分)
举报原因:
原因补充:

(最多只允许输入30个字)