使用Java mouseClicked事件处理程序更改图标

使用Java mouseClicked事件处理程序更改图标,java,swing,jlabel,mouselistener,imageicon,Java,Swing,Jlabel,Mouselistener,Imageicon,我有很多标签。我的问题是,如果我单击label2,然后在label2上设置一个新图像,我不知道如何编写,但是label1不会更改。标签的命名类似于A1-A10。(我实际上有92个标签,所以这变得很麻烦。)以下是我的代码: public void mouseClicked(MouseEvent event) { if (event.getSource()==A1 && (x==1)) { A1.setIcon(new ImageIcon("zoldgomb

我有很多标签。我的问题是,如果我单击
label2
,然后在
label2
上设置一个新图像,我不知道如何编写,但是
label1
不会更改。标签的命名类似于A1-A10。(我实际上有92个标签,所以这变得很麻烦。)以下是我的代码:

public void mouseClicked(MouseEvent event) {

    if (event.getSource()==A1 && (x==1)) {
        A1.setIcon(new ImageIcon("zoldgomb.jpg"));
        x=2;
    } else if(x==2) {
        A1.setIcon(new ImageIcon("sargagomb.jpg"));
        x=1;
    }
}
编辑 好的,我解决了,谢谢大家:)

  • 听起来您应该使用JLabel的数组或ArrayList
  • 变量名都应该以小写字母开头,而类名应该以大写字母开头。此外,还应避免使用诸如
    b
    s
    之类的普通变量名,除非它们用于诸如for循环索引之类的普通目的。取而代之的是使用具有某种意义的名称,这样代码就可以自我注释
  • 通过对传递到方法中的MouseEvent objevct调用
    getSource()
    ,可以识别按下了哪个JLabel。您的参数名为上面的
    event
  • 然后在测试按下哪个JLabel之后,调用它的
    setIcon(…)
    方法
  • 最好只读取一次图像并将其保存到变量中,而不要在每次单击鼠标时重新读取它们

  • +1用于使用
    getSource()
    ,以便所有标签都可以共享一个公共侦听器。@user3633989:如果您尝试先自己编写,则从初学者到中级的速度会更快。如果遇到问题,请返回代码和具体问题。另外,对于将来的问题,您不应该让这里的人为您编写代码。这不是这个地方的运作方式,可能会让这里的一些志愿者感到不安。虽然我们很乐意回答问题并提供指导,但最终问题是你的,代码应该是你的。@user3633989不要在注释中发布代码,因为它丢失了格式,无法阅读。通过将任何新代码发布到原始问题的底部。另外,为了得到最好的帮助,考虑创建和发布一个将代码压缩到最小的位,该位仍然编译和运行,没有外部依赖关系(例如需要链接到数据库),没有额外的代码,这与您的问题无关,但仍然显示您的问题。
    if (event.getSource() instanceof JLabel) {
                    if (x == 1) {
                        ((JLabel)event.getSource()).setIcon(new ImageIcon("zoldgomb.jpg"));
                        x = 2;
                    } else if (x == 2) {
                        ((JLabel)event.getSource()).setIcon(new ImageIcon("sargagomb.jpg"));
                        x = 1;
        }
    }