首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

不久前写的swing小例子

2012-12-20 
最近写的swing小例子心血来潮,重新学习swing,自己写了一个中文转unicode的小工具,在此贴出代码与大家分享,

最近写的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() {@Overridepublic void actionPerformed(ActionEvent e) {outputText.setText(UnicodeCommon.GBK2Unicode(inputText.getText()));}});/* * 增加了一个键盘事件,就是回车就相当于点击提交按钮. * 在这里我犯了一个错误,看了api以后,我实现了keyTyped(KeyEvent e)方法, * 因为api的说明是:键入某个键时调用此方法。 * 但是怎么调试都不成功,后来Google,才知道要实现keyPressed(KeyEvent e)方法, * 具体为什么,不知道了. */inputText.addKeyListener(new KeyAdapter() {@Overridepublic 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文件有问题~

热点排行