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组件,代码如下:
component:ui交互组件的基类,通过回调(callback)实现对事件的监听
下面具体实现几个ui组件:
Button: 模拟button组件
下面是一个ui程序的模拟实现
其实不光是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容器类浅析三-----保证插入顺序的HashMap--LinkedHashMap的存取原理
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
- java NIO Netty实现原理浅析
- Java开发Dubbo分布式框架使用及原理浅析
- java aqs原理浅析
- 浅析JAVA Runtime原理与过各大厂商免杀webshell制作
- 浅析Java中的反射机制原理
- 浅析Java中的反射机制原理
- java.util.concurrent.Exchanger应用范例与原理浅析
- java多线程系列--AQS-01之独占锁原理浅析
- java中迭代器的原理图解和源码浅析
- Java网络编程 - 浅析web服务器与浏览器的实现原理
- JAVA EJB原理浅析
- 浅析Java中的反射机制原理
- java.util.concurrent.Exchanger应用范例与原理浅析
- java NIO Netty实现原理浅析(转)
- 【多线程】java.util.concurrent.Exchanger应用范例与原理浅析
- java.util.concurrent.Exchanger应用范例与原理浅析--转载
- java NIO Netty实现原理浅析(转)