您的位置:首页 > 编程语言 > Java开发

java swing原理浅析

2013-04-14 00:00 204 查看
没有接触过ui编程的人在学习ui编程时可能会对ui组件和各组件间的关系有点混乱,下面笔者就java swing的原理做下简单分析,如有不足之处还望各位朋友指正。

其实不光是java swing ,其他大部分ui原理上都差不多,最起码就我接触过的android ui组件、windows C#应用、java界面应用等关于ui的编程原理上都是大同小异,都是基于代理模式与回调模式的。下面先模拟几个常用的ui组件

window:所有窗口类的基类,包含0个或多个component组件,代码如下:

package cn.edu.nciae.window;

import java.util.ArrayList;

import cn.edu.nciae.window.component.Component;

public abstract class Window {
protected ArrayList<Component> uis = new ArrayList<Component>();
public void add(Component com) {
uis.add(com);
}
//模拟单击事件,回调对应的ui组件的act方法
public void click(int index) {
uis.get(index).getCallback().act(index+"");
}

}


component:ui交互组件的基类,通过回调(callback)实现对事件的监听

package cn.edu.nciae.window.component;

public abstract class Component {
protected String title;
protected ActionListener callback;
public void addActionListener(ActionListener al) {
this.callback=al;
}
public ActionListener getCallback() {
return callback;
}
}
ActionListener:当某个ui事件触发时,执行act方法体

package cn.edu.nciae.window.component;

public interface ActionListener {
//public void actionPerformed(ActionEvent e)
public void act(String src);
}


下面具体实现几个ui组件:

Button: 模拟button组件

import cn.edu.nciae.window.component.Component;

public class Button extends Component {
public Button(String title) {
this.title=title;
}
}


下面是一个ui程序的模拟实现

import java.awt.event.ActionEvent;

import cn.edu.nciae.window.Window;
import cn.edu.nciae.window.component.ActionListener;

public class Frame extends Window {
public Frame() {
initComponents();
}
private void initComponents() {
Button btn1 = new Button("btn1");
btn1.addActionListener(new ActionListener() {

@Override
public void act(String action) {
System.out.println(action+" btn1");

}
});
Button btn2 = new Button("btn2");
btn2.addActionListener(new ActionListener() {

@Override
public void act(String action) {
System.out.println(action+" btn2");

}
});
Button btn3 = new Button("btn3");
btn3.addActionListener(new ActionListener() {

@Override
public void act(String action) {
System.out.println(action+" btn3");

}
});
this.add(btn1);
this.add(btn2);
this.add(btn3);
}

public static void main(String[] args) {
Frame window = new Frame();
//模拟单击window上的按钮
window.click(0);
window.click(1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息