zoukankan      html  css  js  c++  java
  • 【swing开发杂谈】1.美化并在cmd环境下运行你的swing程序

    序言


    好久没有写swing的应用(最后的一个是大二的课程设计=.=),最近又重新搞了一下,感觉很好,表示很喜欢。很多人觉得swing做程序不给力,又难看,其实swing还是很有效率的,稍微设置一下就可以使用系统自带的样式和字体,看上去不丑。

    下面,我就用一个实际的例子说一下我使用swing的心得体会。


    软件功能

    此软件就叫netHelper

    实例中的程序有以下功能:

    1. 获取远程的html代码

        用户输入网址,然后获取这个地址的html代码并显示,这个纯粹是一个演示的功能。。。

    2. http post 测试

        使用http post数据到服务器


    目录如下:



    好吧,让我们开始吧!


    1.对swing程序进行美化

    刚刚开始用swing的时候,觉得swing的界面很是复古,字体也是很模糊的样子,其他swing是可以使用系统的外观的,那么看上去就跟系统的界面差不多了。

    下面是初版本的netHelper的运行效果(使用系统默认的外观与字体):



    对比一下swing原始的效果:



    主要看字体,还有按钮的外观,很明显。

    而其中主要是两段代码在起作用:

    /**
     * 设置字体,使用系统默认,12px
     */
    public static void setUIFont() {
    	 FontUIResource f=new FontUIResource("default", Font.PLAIN,12);
    	 java.util.Enumeration<Object> keys = UIManager.getDefaults().keys();
    	 while (keys.hasMoreElements()) {
    		 Object key = keys.nextElement();
    		 Object value = UIManager.get(key);
    		 if (value instanceof javax.swing.plaf.FontUIResource)
    			 UIManager.put(key, f);
    	 }
    }
    
    /**
     * 设置UIManager
     */
    public static void setUI(){
    	//设置UIMangager为系统默认
    	try {
    		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }


    2.对JFrame作一个常规的设置

    public MainFrame(){
    	this.setSize(width, height);
    	this.setLocationRelativeTo(null);
    	this.setTitle( title + "  by:集成显卡");
    	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    	initUI();
    }


    以上是MainFrame的构造函数。
    通过setSize(int w, int h) 方法可以设置窗口大小,还可以传递一个 dimension 对象。

    setLocationRelativeTo(Component) 可以设置此窗体相对于某个控件的位置,如果参数为null,那么此窗体会在屏幕居中。

    setDefaultCloseOperation(int) 方法可以设置窗体的关闭按钮被点击时退出程序。

    然后 调用initUI() 方法 初始化子控件。


    3.响应事件

    当用户点击其中一个按钮时,程序会做特定的事情,比如链接指定的地址并得到html源代码。这时,就要给按钮注册一个事件监听器,则调用JButton的addActionListener(ActionListener) 方法,这里,我让MainFram直接实现了 ActionListener 接口,此接口有一个方法:

    public void actionPerformed(ActionEvent arg0) {
    
    }

    在MainFrame中有如下实现:

    private void loadHtml(){
    	String http = "http://";
    	String url = urlTF.getText().trim();
    	if(!url.startsWith(http)){
    		url = http + url;
    	}
    	
    	this.textArea.setText(NetService.getDataFromURL(url));
    }
    
    @Override
    public void actionPerformed(ActionEvent arg0) {
    	Object obj = arg0.getSource();
    	
    	if(obj == getBtn){
    		loadHtml();
    	}else if(obj == aboutBtn){
    		JOptionPane.showMessageDialog(
    				null, 
    				"输入网址,点击Get按钮后会加载网址的内容到下面的编辑框中。", 
    				title, 
    				JOptionPane.INFORMATION_MESSAGE
    			);
    	}
    }

    首先通过ActionEvent的getSource() 方法获得事件源控件,然后判断控件,作相应的操作。

    当是“Get”按钮,调用 loadHtml() 方法,在loadHtml 方法中先获取输入的地址,然后调用 NetService 中的静态方法 getDataFromURL(String) 获取远程地址的html代码,最后显示到 TextArea中。

    当是“About”按钮被点击,弹出一个信息对话框。JOptionPane 很是常用,使用也比较简单。


    4. 打包swing程序,并到处运行

    目前将java程序转换为exe双击运行的工具有很多,推荐 exe4j,这个是共享软件,不过,你可以很方便找到破解版,你懂的。

    这里我就说一下用eclipde生成jar后,怎么快速地在其他电脑上运行我们的swing程序。


    在eclipse下,右击项目,Export,然后:


    然后:


    两个都是可以的,我一般用第二个,这样用到的额外包会以jar文件的形式放到你的jar包中,而第一个就是会解压额外包的class到你的jar中,这样你的jar中就很多package了,很乱。

    我选择用批处理的方法运行我的程序,因为是java程序,还是要一个JRE,以上是我的run.bat文件:

    #首先设置java路径
    
    path = %path%;e:/java/jre6/bin
    
    java -jar netHelper.jar
    

    这里用的是一个绝对路径的JRE,当要将程序拷贝到其他机子时,就将JRE copy到我们jar包的同目录,然后将JRE的路径修改为相对路径:

    path = %path%;jre6/bin


    这样就好了。


    好了。

    下一篇会讲swing的多线程。


    代码下载

    源码下载地址:http://download.csdn.net/detail/ssrc0604hx/5204650


  • 相关阅读:
    自我学习而已——javascript——变量,作用域和内存问题
    自我学习而已——javascript——数据类型部分
    面向对象三大特性之封装
    面向对象三大特性之继承与多态
    初识面向对象
    python常用模块(re模块)
    递归函数与算法
    Python之匿名函数
    python之内置函数
    各种推导式
  • 原文地址:https://www.cnblogs.com/nerve/p/3185432.html
Copyright © 2011-2022 走看看