今天被画图板的一个鼠标右键单击处理事件的事情搞得晕头转向的,为了让鼠标左键点击和右键点击在画图面板上设置不同的景色,也就是前景色和背景色。按理来说只需要点击时获取点击的按钮颜色,然后再在需要展示的按钮上设置相关的背景色setBackground();即可,不过这里有一点麻烦:我给每个颜色按钮添加了动作监听器addActionListener();当我的鼠标左键点击时完全是没有问题的,能够在ActionPerformed()里获取点击的按钮的相关信息,在进行操作,但是这方法到了右键就出问题了啊,首先是我打算在ActionPerformed()里面直接运用判别句来对鼠标不同键进行监听:
if(e.getButton()==e.BUTTON1){
*******************
}
else{
*******************
}
但是试图用过的人都知道这肯定是错的,因为ActionListener是监听动作的,和界面组件有关,所以它里面是绝对不可能有什么和鼠标相关的e.getButton()的方法的。
所以,我就迫不得已的转战将ActionPerformed里面的代码移到了MouseClicked里面,然后只留下一个按下按钮返回的值方法,但是这又有一个问题了,当鼠标右键点击按钮时,程序不会执行ActionPerformed里面的方法,也就是说得不到按钮的返回值,也就无法设置颜色了。
正在我纠结之时,在这关键时刻,好戏就要登场了,这就是今天要介绍的事件源的应用,再次得多谢熊哥,这个方法是他提醒我的,具体代码如下:
if(e.getButton()==e.BUTTON1){
jb1.setBackground(color);
}
else{
Object sour = e.getSource();
if(sour instanceof JButton){
JButton bu = (JButton)sour;
int n = Integer.parseInt(bu.getActionCommand());
jb2.setBackground(str[n]);
}
}
如果是左键单击,就直接能返回值,然后直接.setBackground(color);否则认定为右键(注:滑轮不考了,当右键吧,一般也没多少人会点那玩意),然后就对点击返回一个事件源了,如果点击的是按钮,则怎么样怎么样.....,中间过程我也不是很明白,就不细讲了,反正利用这种方法是能够得到按钮的返回值的,最后通过设定的颜色数组str[]来设置颜色,就大功告成了~~~~!!!
写在片尾:以上只是一种解决该问题的方法,至于其他能够实现的方法,肯定是有的,比如说我们一组的黄高乐就已经实现了这种方法,不过他给我讲的我还是不怎么明白,但是大概我应该也能觉得他用的是另一种方法。欢迎大家多多指教~~~
if(e.getButton()==e.BUTTON1){
*******************
}
else{
*******************
}
但是试图用过的人都知道这肯定是错的,因为ActionListener是监听动作的,和界面组件有关,所以它里面是绝对不可能有什么和鼠标相关的e.getButton()的方法的。
所以,我就迫不得已的转战将ActionPerformed里面的代码移到了MouseClicked里面,然后只留下一个按下按钮返回的值方法,但是这又有一个问题了,当鼠标右键点击按钮时,程序不会执行ActionPerformed里面的方法,也就是说得不到按钮的返回值,也就无法设置颜色了。
正在我纠结之时,在这关键时刻,好戏就要登场了,这就是今天要介绍的事件源的应用,再次得多谢熊哥,这个方法是他提醒我的,具体代码如下:
if(e.getButton()==e.BUTTON1){
jb1.setBackground(color);
}
else{
Object sour = e.getSource();
if(sour instanceof JButton){
JButton bu = (JButton)sour;
int n = Integer.parseInt(bu.getActionCommand());
jb2.setBackground(str[n]);
}
}
如果是左键单击,就直接能返回值,然后直接.setBackground(color);否则认定为右键(注:滑轮不考了,当右键吧,一般也没多少人会点那玩意),然后就对点击返回一个事件源了,如果点击的是按钮,则怎么样怎么样.....,中间过程我也不是很明白,就不细讲了,反正利用这种方法是能够得到按钮的返回值的,最后通过设定的颜色数组str[]来设置颜色,就大功告成了~~~~!!!
写在片尾:以上只是一种解决该问题的方法,至于其他能够实现的方法,肯定是有的,比如说我们一组的黄高乐就已经实现了这种方法,不过他给我讲的我还是不怎么明白,但是大概我应该也能觉得他用的是另一种方法。欢迎大家多多指教~~~