java swing原理浅析

没有接触过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);
     }
}

转载于:https://my.oschina.net/wisedream/blog/122759

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值