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);
     }
}

你可能感兴趣的:(java,swing,swing分析,swing原理)