技术标签: button swing java null mvc 设计模式
public void setModel(ButtonModel buttonmodel) { if (this.buttonmodel != null) { this.buttonmodel.removeChangeListener(buttonchangelistener); this.buttonmodel.removeActionListener(buttonactionlistener); buttonchangelistener = null; buttonactionlistener = null; } this.buttonmodel = buttonmodel; if (this.buttonmodel != null) { buttonchangelistener = new ButtonChangeListener(); buttonactionlistener = new ButtonActionListener(); this.buttonmodel.addChangeListener(buttonchangelistener); this.buttonmodel.addActionListener(buttonactionlistener); } updateButton(); } public void setUI(ButtonUI buttonui) { if (this.buttonui != null) { this.buttonui.uninstallUI(this); } this.buttonui = buttonui; if (this.buttonui != null) { this.buttonui.installUI(this); } updateButton(); } public void updateButton() { invalidate(); } |
在进入下一节之前,你应该多花一些时间来仔细阅读一下Button类的源代码。
ButtonModel类
ButtonModel维护着三种类型的状态信息:是否被按下(pressed),是否“武装上了”(armed),是否被选择(selected)。它们都是boolean类型的值。
一个按钮被按下(pressed)是指当鼠标在按钮上面的时候,按下鼠标但是还没有松开鼠标按钮的状态,及时用户此时把鼠标拖拽到按钮的外面也没有改变这种状态。
一个按钮是否“武装了”(armed)是指按钮被按下,并且鼠标还在按钮的上面。
一些按钮还可能被选择(selected),这种状态通过重复的点击按钮取得true或者false的值。
下面的代码是状态pressed的一个缺省的实现。状态armed以及selected实现的代码与之类似。ButtonModel类应该被继承,这样可以覆盖缺省的状态定义,实现有个性的按钮。
private boolean boolPressed = false; public boolean isPressed() { return boolPressed; } public void setPressed(boolean boolPressed) { this.boolPressed = boolPressed; fireChangeEvent(new ChangeEvent(button)); } |
private Vector vectorChangeListeners = new Vector(); public void addChangeListener(ChangeListener changelistener) { vectorChangeListeners.addElement(changelistener); } public void removeChangeListener(ChangeListener changelistener) { vectorChangeListeners.removeElement(changelistener); } protected void fireChangeEvent(ChangeEvent changeevent) { Enumeration enumeration = vectorChangeListeners.elements(); while (enumeration.hasMoreElements()) { ChangeListener changelistener =(ChangeListener)enumeration.nextElement(); changelistener.stateChanged(changeevent); } } |
public void update(Button button, Graphics graphics) { } public void paint(Button button, Graphics graphics) { Dimension dimension = button.getSize(); Color color = button.getBackground(); graphics.setColor(color); graphics.fillRect(0, 0, dimension.width, dimension.height); } |
private static ButtonUIListener buttonuilistener = null; public void installUI(Button button) { button.addMouseListener(buttonuilistener); button.addMouseMotionListener(buttonuilistener); button.addChangeListener(buttonuilistener); } public void uninstallUI(Button button) { button.removeMouseListener(buttonuilistener); button.removeMouseMotionListener(buttonuilistener); button.removeChangeListener(buttonuilistener); } |
public void mouseDragged(MouseEvent mouseevent) { Button button = (Button)mouseevent.getSource(); ButtonModel buttonmodel = button.getModel(); if (buttonmodel.isPressed()) { if (button.getUI().contains(button, mouseevent.getPoint())) { buttonmodel.setArmed(true); } else { buttonmodel.setArmed(false); } } } public void mousePressed(MouseEvent mouseevent) { Button button = (Button)mouseevent.getSource(); ButtonModel buttonmodel = button.getModel(); buttonmodel.setPressed(true); buttonmodel.setArmed(true); } public void mouseReleased(MouseEvent mouseevent) { Button button = (Button)mouseevent.getSource(); ButtonModel buttonmodel = button.getModel(); buttonmodel.setPressed(false); buttonmodel.setArmed(false); } public void stateChanged(ChangeEvent changeevent) { Button button = (Button)changeevent.getSource(); button.repaint(); } |
Spearman相关系数以及Spearman相关系数和Pearson相关系数比较。
#include<iostream>#include<string.h>#include<string>using namespace std;#define SIZE 33#define MULSIZE 2*SIZEtypedef struct Bigint{ unsigned char num[SIZE];}Bigint;typedef struct Bigint2{ unsigned char num[2 * SIZE];}Bigi
本文主要讨论OPC UA中DisplayName和BrowseName的区别一 问题以变量为例,当我们添加变量时,在变量属性里会设置其DisplayName,接着调用UA_Server_addVariableNode()时会传递其BrowseName,典型代码如下,static void addVariable(UA_Server *server) { /* Define the...
git reset --soft HEAD^–soft不删除工作空间改动代码,撤销commit,不撤销git add .–mixed意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。–hard删除工作空间改动代码,撤销commit,撤销git add .注意完成这个操作后,就恢复到了上一次的commit状态。...
Python中那些你必须知道的坑整数比较的坑在 Python 中一切都是对象,整数也是对象,在比较两个整数时有两个运算符==和is,它们的区别是:is比较的是两个整数对象的id值是否相等,也就是比较两个引用是否代表了内存中同一个地址。==比较的是两个整数对象的内容是否相等,使用==时其实是调用了对象的__eq__()方法。知道了is和==的区别之后,我们可以来看看下面的代码,了解Python中整数...
利用C++语言完成《剑指offer》025 复杂链表的复制:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
找不到数据源Macrosoft Access odbc问题问题在学习web开发时遇到的问题:未能在自己的电脑上找到数据源
keil编辑器的功能实属落后编辑代码主题万年不变的白色,也尝试过更换不同的主题颜色,但是效果都不怎么尽人意连代码自动格式化工具都没有写程序最重要的代码整洁,整洁的代码不仅可以使人心情愉悦,更重要的是提高效率,增加可读性好在开源格式化工具 Astyle 在keil中可用,配置过程我参考了很多网上的资料这里总结一下Astyle官网http://astyle.sourceforge.net...
一、开篇对于linux内核来说,她有一个统一的入口,那就是head.o模块,在不同架构下,该模块有着不同的文件名称,例如head.S、head_xxx.S;该文件的具体路径是(/arch//kernel/head.S),其中是具体的架构名称。head.o模块用于完成和架构、CPU相关的初始化工作,主要用于为内核主体的执行做准备。除此之外,head.o的功能还有:检查处理器和架构的有效性。创建初始的页表表项。启用处理器的内存管理单元(MMU)。进行错误检测并报告。跳转到内核主体的起始位置。(ma
一个URL(统一资源路径地址)包含哪些部分呢?举个例子,比如 “http://www.baidu.com/index.html?name=mo&amp;age=25#dowell”,在这个例子中我们可以分成六部分;1、传输协议:http,https2、域名: 例www.baidu.com为网站名字。 baidu.com为一级域名,www是服务器3、端口: 不填写的话默认走的是80端口号...
//oj2011#include<stdio.h>int main(){ int m,i; while(scanf("%d",&m)!=EOF) { static int n[100]; static double s[100]; int j=1,fu=1; if(m<100) { for(i=0;i<m;i++) ...
Perfect是目前最流行的Swift语言服务器端框架,本文详细介绍了用Perfect开发Slack聊天机器人服务器中的主要步骤。