束手无策了,来求9高人指点!

zygege 2007-08-11 12:27:43
写游戏遇到一个问题:声明了一个JButton的子类OpenButton
在包含它的JPane中的actionPerformed中用
((OpenButton)(e.getSource())).setText(""),按钮的标签没有改变,为何?

或者说我如何获得一个变量名的字符串表现形示,toString怎么也找不到变量名中的半个字符,都是关于类的信息和对象本身的信息,有个叫哈稀码的16进制方法,不知道能不能得到变量名?
求高人出来指点一下!
...全文
273 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zygege 2007-08-29
  • 打赏
  • 举报
回复
那个e.getSource()取道的不是button.是JPanel才对阿

===========================
那个是JBUTTON(JBUTTON是Jpanel里的一个按钮,注册this,当然属于类里面的处理事件,不可能处理Jpanel,JPANEL我压根没注册,怎么执行),我已经解决了,问题如楼上所说是监听器顺序问题。
insiku 2007-08-28
  • 打赏
  • 举报
回复
书上说是同时执行

======================

你看的哪本sb写的书
虚拟机不保证监听器的执行先后 只保证执行
不要编写跟监听器执行先后有关的代码
insiku 2007-08-28
  • 打赏
  • 举报
回复
与其这么费尽说个半天
还不如上代码
shmilycharlene 2007-08-27
  • 打赏
  • 举报
回复
在包含它的JPane中的actionPerformed中用
((OpenButton)(e.getSource())).setText(""),按钮的标签没有改变,为何?



那个e.getSource()取道的不是button.是JPanel才对阿
zygege 2007-08-13
  • 打赏
  • 举报
回复
多谢楼上ukeychen() 的提醒,还有smyl9989(☆☆☆☆☆) 的这句话:e.getSource是JPane吧。
ukeychen() 提到actionCommand方法很管用,加上smyl9989的那句话的提醒(虽然不是原因),我找到了openButton类,我里面的单击方法是
if this.getText().equals("")
setText(label);
而在jpane中的单击方法是:
((OpenButton)(e.getSource())).setText("") ;
根据system.out.println()测试,我分别在两个事件中放了打印,发现是jpane中的单击方法先执行,由于先将标签设为了空,而后执行openButton类本身的单击方法,当然又将标签设置回来了。

搞不懂的是:
我另外写了一个applet,却发现是类本身的单击方法先执行,然后才是面板里的。

为什么,到底这两个方法,谁先执行,为什么一会你先,一会他先!书上说是同时执行???

所以这个游戏我不用OpenButton了,直接用了JButton,用了actionCommand方法,很管用,并实现了游戏功能!!!
感谢楼上!
但是这个游戏遇到一个问题,设了按钮图标,在eclipse中运行,显示为一个很小的点。
而在JCreator中运行,则没有问题。我是在中文路径中写的这个程序,我将程序移植到英文路径下,eclipse才通过运行,显示了图标。而JCreator无论什么路径,都行。这表明了什么?
eclipse你还要向你的弟弟JCreator学习啊,人家功能 是差点,可是实现的功能,都不错,你搞什么不支持中文路径!!
另一个关于jar问题,运行正常,打包后运行又出问题,是用eclipse打
zygege 2007-08-12
  • 打赏
  • 举报
回复
我创建了包含30个按钮( OpenButton open[30]=new OpenButton() )的按钮组,用循环注册了监听器,并实例化了每个元素。,也都依次添加到Jpanel中了,按GridLayout,5,6排的.
并且有一点要说明,如果我直接在actionPerformed中写OpenButton的实例对象,则行:如open[0].setText("")是可行的。
并且我的Jpanel并没有注册任何监听器。所以是Jpanel的可能性基本上没有。
DirectRay 2007-08-12
  • 打赏
  • 举报
回复
你看看用这样接受,能不能打出来。

if (e.getSource() == jButton[1])
//TODO:添加测试代码。不妨直接抓名字。
}
zygege 2007-08-12
  • 打赏
  • 举报
回复
好。我回头试试,现在不在家!
ukeychen 2007-08-12
  • 打赏
  • 举报
回复
可能跟你类有关吧,
既然你说 open[0].setText("")是可行的。
那么,你在给button初始化时,
给第一个button.setActionCommand("0");
给第二个button.setActionCommand("1");
接下来依次类推,这些0,1,2……数字也就是跟数组下标想对应

那么一来,你在监听里
将((OpenButton)(e.getSource())).setText(""),
改成以下两句就行了:
int i=Integer.ParseInt(e.getActionCommand);
open[i].setText("");

我没调试过,不过我想行的,你自己试试看吧






zygege 2007-08-11
  • 打赏
  • 举报
回复
狂晕啊,不是说这个是中国最牛的程序员BBS嘛,怎么连沙发都米有人来给我坐啊!
混沌骑士 2007-08-11
  • 打赏
  • 举报
回复
((OpenButton)(e.getSource())).setText("") --- > e.getSource是JPane吧 不知道你的代码怎么写的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧