华丽的痘痘
努力成为一个有价值的程序员
登录
注册
全站
当前博客
空间
博客
好友
相册
留言
王亚楠
ID:andycpp
共
45454
次访问,排名
2388(-1)
好友
17
人,关注者
31
人
做一名合格地java教师
andycpp的文章
原创 42 篇
翻译 1 篇
转载 16 篇
评论 15 篇
最近评论
zjcone:
很明确,谢谢!
czdvcc:
wow power leveling
hukaibao2007:
不错
wjjdlove:
貌似不错呢
wjjdlove:
thanks
文章分类
JAVA技术
(RSS)
常见算法
(RSS)
代码收藏
(RSS)
随笔
(RSS)
收藏
经典文章
相册
我的相册
高手专栏
Web高手buaawhl的专栏
(RSS)
阿朱的博客
(RSS)
存档
2008年09月(3)
2008年08月(3)
2007年09月(3)
2007年08月(7)
2007年07月(11)
2007年06月(5)
2007年02月(1)
2006年10月(7)
2006年09月(5)
2006年08月(1)
2006年06月(1)
2006年04月(2)
2006年03月(3)
2006年02月(3)
软件项目交易
订阅我的博客
使用Action创建一个JButton后,改变该按钮的名字可能会遇到意想不到的问题
收藏
新一篇: 在Eclipse中使用JUnit4进行单元测试(初级篇)
|
旧一篇: Minotaur——人身牛头怪的传说
我们来看一个简单的小例子
有2个按钮a和b,单击a会改变b的名字,单击b再把自己的名字改回来。下面是我写的代码:
public
class
ATestPanel
extends
JPanel
...
{
public
ATestPanel()
...
{
changeHisName
=
new
JButton(
"
把他的名字改为Jack
"
);
changeHisName.addActionListener(
new
ActionListener()
...
{
public
void
actionPerformed(ActionEvent e)
...
{
//
把另一个按钮的名字改为“Tom”
tom.setText(
"
Jack
"
);
}
}
);
tom
=
new
JButton(
new
AbstractAction()
...
{
public
void
actionPerformed(ActionEvent e)
...
{
//
把自己的名字改回为“Tom”
putValue(Action.NAME,
"
Tom
"
);
}
...
{
putValue(Action.NAME,
"
Tom
"
);
putValue(Action.SHORT_DESCRIPTION,
"
我原来叫Tom
"
);
}
}
);
add(changeHisName);
add(tom);
}
JButton changeHisName, tom;
}
把上面的JPanel放到一个JFrame中运行一下,初始效果如下:
当点击了左边的按钮后,Tom的名字就被改了,效果如下:
这个时候,我们再点击右面的按钮,想把名字改回“Tom”。结果可能会让你大吃一惊(至少让我迷茫了半个多小时),
没有任何反应!
该按钮仍然叫“Jack”,而没有变回“Tom”。再回头看上面的代码,我们明明写了:
putValue(Action.NAME,
"
Tom
"
);
他咋就不起作用呢?????????
产生这个问题的根源在于,
putValue(Action.NAME,
"
Tom
"
);这个方法自身做了优化,他首先判断
按钮目前的
Action.NAME
属性和即将改变的
Action.NAME
属性是否相同,如果相同就不做任何处理。当我们点击右面的按钮来改变左边按钮的名字的时候,他使用的是setText方法:
tom.setText(
"
Jack
"
);
而setText方法仅仅是改变按钮显示的内容,他不改变该按钮的
Action.NAME属性。因此尽管上图中的按钮显示为“Jack”,但是他的
Action.NAME属性仍然是“Tom”!!所以,当你点击他想重新显示“Tom”,这个时候
putValue方法就会发现你想把“Tom”改为“Tom”,前后完全一样,不予受理,维持当前显示内容!结果就导致了一直显示“Jack”~
那么,遇到这种情况,该怎么解决呢?解决的办法就是,不要使用setText方法来改变名字,换成putValue方法就好了。具体到我们这个例子,就是
把 tom.setText(
"
Jack
"
);
换成 tom.getAction().putValue
(Action.NAME,
"
Tom
"
);
这样子就可以了。
发表于 @
2006年09月28日 00:26:00
|
评论(
loading...
)
|
编辑
新一篇: 在Eclipse中使用JUnit4进行单元测试(初级篇)
|
旧一篇: Minotaur——人身牛头怪的传说
评论:没有评论。
发表评论
姓 名:
主 页:
校验码:
看不清,换一张
当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击
登录