2019独角兽企业重金招聘Python工程师标准>>>

没有接触过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() {@Overridepublic void act(String action) {System.out.println(action+" btn1");}});Button btn2 = new Button("btn2");btn2.addActionListener(new ActionListener() {@Overridepublic void act(String action) {System.out.println(action+" btn2");}});Button btn3 = new Button("btn3");btn3.addActionListener(new ActionListener() {@Overridepublic 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

java swing原理浅析相关推荐

  1. 入侵JVM?Java Agent原理浅析和实践(上)

    声明:本文首发于京东零售技术公众号,为博主本人撰写投稿. 前言: 在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信 ...

  2. 客户端是选择Java Swing还是C# Winform

    登录 | 注册 mentat的专栏 目录视图 摘要视图 订阅 [专家问答]韦玮:Python基础编程实战专题     [知识库]Swift资源大集合     [公告]博客新皮肤上线啦     快来领福 ...

  3. java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一)

    Java Swing创建自定义闪屏:在闪屏上画进度条(一) 由于本人十分热爱Java Swing,所以平时闲暇之余总是喜欢极尽所能去搜藏一些自认为比较"酷"的Swing代码来研究揣 ...

  4. LinkedList 的实现原理浅析

    转载自 LinkedList 的实现原理浅析 LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Clo ...

  5. java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  6. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  7. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  8. ActiveMQ使用及原理浅析(消息队列)

    文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...

  9. 【java毕业设计】基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码)——俄罗斯方块游戏

    基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的俄罗斯方块游戏GUI设计与实现,文章末尾 ...

最新文章

  1. 利用python安装opencv_Linux下安装OpenCV+Python支持
  2. 明早1点去青岛,可能要两天不能写博客了
  3. pomelo php,Nginx 502 Bad Gateway 自动重启shell脚本
  4. 中计算散度的函数_荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly
  5. 一文搞定Swing和Qt按钮和文本框的创建
  6. 5分钟就能完成的Python小项目,赶紧拿去玩玩吧
  7. java long short_Java Long类shortValue()方法与示例
  8. 科来网络分析系统 6.7 技术交流版序列号
  9. 小米蓝牙耳机使用说明书
  10. 微信小程序(safair浏览器)flex布局中的坑
  11. 兼顾时尚与商务? ThinkPad Z 重新定义“商务本”
  12. 电脑打字不显示候选框问题
  13. ConcurrentMap
  14. sort by age(vector)
  15. 计算机软件的版本分类
  16. 自认为最中肯的“北大”评价吧(转)
  17. 购买《哈利波特》书方案
  18. CentOS 7 wget 正在连接 127.0.0.1:8118... 失败:拒绝连接。
  19. 基于SSM的商城项目项目源码+实验报告
  20. matlab汽车稳态响应特性仿真,基于MATLAB的车辆工程仿真实例

热门文章

  1. oracle19c数据库清理,Oracle 19c集群重装
  2. Linux怎么关闭ssh和ftp服务,linux ftp启用和停用及vsftpd安装 ssh 启用和停用命令及ssh的安装...
  3. windows和liunx下换行符问题
  4. linux兼容性,Atom 1.23发布:功能增强,兼容性更好
  5. flutter 移动通知_Flutter移动电商实战 --(24)Provide状态管理基础
  6. signature=066eaf4ada3cc7a99cb8d41fb298a3d4,Video Fusion Display Systems
  7. mysql 表字段大小写敏感_各种数据库大小写敏感问题总结
  8. mac安装mysql8.0.11_【MySQL】Mac安装MySQL(V8.0.15)蹚坑记录
  9. afn原理 ios_iOS开发:AFN的基本使用
  10. eclipse java代码颜色设置颜色设置颜色设置颜色设置颜色_eclipse设置(颜色,字体等)...