`
sydra
  • 浏览: 5281 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

最近写的swing小例子

阅读更多
心血来潮,重新学习swing,自己写了一个中文转unicode的小工具,在此贴出代码与大家分享,
下面先是效果图.


不善文字表达,直接贴代码了,把我想写的东西都写进代码注释里面了.绿色部分就是了
package org.sluggard.swing;

import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import org.sluggard.common.UnicodeCommon;

/**
 * 一个gbk转unicode的小工具
 * @author Frank
 * @version 1.0
 *
 */
/*
 * 绿色部分的注释是为了发博客所写.
 * 
 */
public class GBK2Unicode {
	
	/*
	 * 先把整个界面需要的元素声明好
	 */
	private JFrame frame;
	private JLabel inputLabel;
	private JLabel outputLabel;
	private JTextField inputText;
	private JTextField outputText;
	private Container contentPane;
	private JButton button;
	
	/*
	 * 用来把整个fram显示出来的方法
	 */
	private void go(){
		frame.setVisible(true);
	}
	
	public GBK2Unicode() {
		/*
		 * Jframe的这个构造器,传入的string会成为frame的title
		 */
		frame = new JFrame("GBK2Unicode");
		/*
		 * 这个方法是个frame设置默认的关闭方法,就是右上角的x.
		 */
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		view();
	}
	
	public void view(){
		contentPane = frame.getContentPane();
		/*
		 * 我觉得layout是swing中的关键,整个界面开发的学习过程基本上就是layout的学习过程
		 * 这个layout我在api中找了好久,最终用这个基本实现了所需的布局.
		 */
		GridBagLayout gbl=new GridBagLayout();
		/*
		 * 这个layout还有自己的管理器
		 */
		GridBagConstraints gbc=new  GridBagConstraints();
		/*
		 * 这行是从示例代码中抄来的,api解释是
		 * GridBagConstraints.fill:当组件的显示区域大于它所请求的显示区域的大小时使用此字段。
		 * 我不是很理解,但是没有这句,整个界面就乱了.
		 */
		gbc.fill= GridBagConstraints.BOTH;
		contentPane.setLayout(gbl);
		inputLabel = new JLabel("输入");
		inputText = new JTextField(30);
		button = new JButton("提交");
		/*
		 * 这行是可以省略的,默认值就是这个
		 */
		gbc.weightx=GridBagConstraints.BOTH;
		/*
		 * 把定义好的Component通过layout加入frame的方法.具体自己看代码
		 */
		make(gbl, inputLabel, gbc);
		make(gbl, inputText, gbc);
		/*
		 * 这句是关键,把下一个组件设置为这一行的最后一个组件,类似println(),
		 * 因为写惯了html,总是习惯在行尾加<br/>来进行换行,
		 * 这种在最后一个组件之前换行的方式让我有些费解,
		 * 我觉得在行尾提供一个api操作会更好.
		 */
		gbc.gridwidth= GridBagConstraints.REMAINDER;
		make(gbl, button, gbc);
		outputLabel = new JLabel("输出");
		outputText = new JTextField();
		/*
		 * 因为之前设置了换行,现在还得设置回来
		 */
		gbc.gridwidth = 1;
		make(gbl, outputLabel, gbc);
		make(gbl, outputText, gbc);
		/*
		 * 组件设置完毕了~这里就是程序逻辑了~
		 * 很简单,掉另外一个方法把input的内容转成unicode,
		 * 然后set到output里面去
		 */
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				outputText.setText(UnicodeCommon.GBK2Unicode(inputText.getText()));
			}
		});
		/*
		 * 增加了一个键盘事件,就是回车就相当于点击提交按钮.
		 * 在这里我犯了一个错误,看了api以后,我实现了keyTyped(KeyEvent e)方法,
		 * 因为api的说明是:键入某个键时调用此方法。
		 * 但是怎么调试都不成功,后来Google,才知道要实现keyPressed(KeyEvent e)方法,
		 * 具体为什么,不知道了.
		 */
		inputText.addKeyListener(new KeyAdapter() {

			@Override
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_ENTER) {
					button.doClick();
				}
			}
			
			
			
		});
		/*
		 * 初始化方法,会自动调整大小
		 */
		frame.pack();
	}
	
	/**
	 * 把Component通过GridBagLayout加入到Frame的Container中
	 * @param gbl
	 * @param c
	 * @param gbc
	 */
	private void make(GridBagLayout gbl,Component c,GridBagConstraints gbc){
		gbl.setConstraints(c,gbc);
		contentPane.add(c);
	}
	
	public static void main(String args[]){
		new GBK2Unicode().go();
	}

}


javaeye居然没有把双*注释和单*注释区分开来~将就看吧~我还想找一个方法把初始化后的窗体大小固定下来,但是没有找到方法~
最后补上jar包,我用一个小工具把它变成了exe文件,方便大家执行.
ps上传zip包的时候,发现je在Chrome下上传zip文件有问题~
  • 大小: 14.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics