博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用WindowBuilder辅助Java GUI开发
阅读量:5265 次
发布时间:2019-06-14

本文共 3977 字,大约阅读时间需要 13 分钟。

      WindowBuilder的前身是Instantiations开发的SWT Designer,2010年8月初Google收购了Instantiations,之后重新发布了Instantiations的开发工具,并且对所有开发人员免费,其中就包括用于Java图形界面设计的WindowBuilder。

      WindowBuilder的下载方式见。安装完成后,即可在File->New->Other...中看到WindowBuilder,如图1所示。

图1

     在WindowBuilder下可以直接建立工程,也可以建立单个的窗口。假设已经建立了工程,这里选择Swing Designer下的Application Window,点击Next >后,类似于新建类,在后续对话框中输入Name和Package,如图2所示。

图2

Finish后,即可得到HelloWorld.java。打开HelloWorld.java,可见其中已经预先生成了一些代码,是一个空白的窗体。点击代码窗口左下角新出现“Design"标签,可以使用WindowBuilder Editor可视化地查看窗体(也可以在HelloWorld.java上点击右键,选择Open With->WindowBuilder Editor),如图3所示。

图3

      WindowBuilder Eidtor的界面类似于VS等工具,能够可视化地对界面进行设计。点击Layouts下的Absolute layout,再点击窗体,使用绝对定位;点击Components下的JTextField,再点击窗体,添加一个文本框,修改其Variable属性为”txtName“;点击Components下的JButton,再点击窗体,添加一个按钮,修改其Variable属性为btnSubmit,修改其text属性为”Submit“;点击Components下的JLabel,再点击窗体,添加一个标签,修改其Variable属性为lblName,修改其text属性为”Name:“;同样方法再添加一个JLabel,修改其Variable属性为lblMessage,修改其text属性为”Please enter your name.“;调整界面尺寸,最终得到的界面如图4所示。

图4

 

这时点击左下角的”Source“标签回到代码编辑器,可以看到WindowBuilder生成的代码如下:

package text;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;public class HelloWorld {	private JFrame frame;	private JTextField txtName;	/**	 * Launch the application.	 */	public static void main(String[] args) {		EventQueue.invokeLater(new Runnable() {			public void run() {				try {					HelloWorld window = new HelloWorld();					window.frame.setVisible(true);				} catch (Exception e) {					e.printStackTrace();				}			}		});	}	/**	 * Create the application.	 */	public HelloWorld() {		initialize();	}	/**	 * Initialize the contents of the frame.	 */	private void initialize() {		frame = new JFrame();		frame.setBounds(100, 100, 196, 169);		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		frame.getContentPane().setLayout(null);				txtName = new JTextField();		txtName.setBounds(57, 18, 93, 21);		frame.getContentPane().add(txtName);		txtName.setColumns(10);				JButton btnSubmit = new JButton("Submit");		btnSubmit.setBounds(57, 46, 93, 23);		frame.getContentPane().add(btnSubmit);				JLabel lblName = new JLabel("Name:");		lblName.setBounds(20, 21, 54, 15);		frame.getContentPane().add(lblName);				JLabel lblMessage = new JLabel("Please enter your name.");		lblMessage.setBounds(20, 79, 151, 15);		frame.getContentPane().add(lblMessage);	}}

  

如果在点击”Source“标签前选中了某个组件,则点击”Source“回到代码编辑器后,光标则会自动定位到对应的组件。

      再点击”Design“回到WindowBuilder Editor,双击Submit按钮,同大多数GUI开发工具类似,WindowBuilder认为此时要编写事件处理代码,界面自动切换到代码编辑器,且WindowBuilder已经在initialize()中完成了监听器的定义和注册:

btnSubmit.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent arg0) {    }});

  

WindowBuilder使用匿名内部类的形式实现事件处理器。修改initialize()如下:

private void initialize() {    frame = new JFrame();    frame.setBounds(100, 100, 196, 169);    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    frame.getContentPane().setLayout(null);		    txtName = new JTextField();    txtName.setBounds(57, 18, 93, 21);    frame.getContentPane().add(txtName);    txtName.setColumns(10);		    final JLabel lblMessage = new JLabel("Please enter your name.");    lblMessage.setBounds(20, 79, 151, 15);    frame.getContentPane().add(lblMessage);		    JButton btnSubmit = new JButton("Submit");    btnSubmit.addActionListener(new ActionListener() {        public void actionPerformed(ActionEvent arg0) {            lblMessage.setText("Hello " + txtName.getText() + "!");        }    });    btnSubmit.setBounds(57, 46, 93, 23);    frame.getContentPane().add(btnSubmit);		    JLabel lblName = new JLabel("Name:");    lblName.setBounds(20, 21, 54, 15);    frame.getContentPane().add(lblName);}

  

这里将lblMessage的定义放在按钮btnSubmit之前,并定义为final(在匿名类内部使用外部定义的对象,则该对象必须为final),运行结果如图5所示。

 

 

图5
      WindowBuilder能够可视化地开发界面,并自动生成大部分代码,可以极大地方便JAVA GUI的设计和开发,但WindowBuilder完成的代码毕竟为机器自动生成,对于复杂的界面和事件处理,仍需要手动对代码进行整理。多数情况下,对WindowBuilder生成的代码进行移动后,WindowBuilder Editor仍能可视化地显示界面。

 

 

 

转载于:https://www.cnblogs.com/litx/archive/2013/05/14/3111112.html

你可能感兴趣的文章
instanceof
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
2015/8/4 告别飞思卡尔,抛下包袱上路
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
C# GC 垃圾回收机制
查看>>
mysqladmin 修改和 初始化密码
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>