JLabel如何在鼠标事件中更换ImageIcon?
JLabel是加在JPanel上的。对JPanel鼠标监听 addMouseListener(this);。想在 public void mousePressed(MouseEvent e) {
    }
    public void mouseReleased(MouseEvent e) {
 
    }
    public void mouseClicked(MouseEvent e) {
    }
这些事件中实现JLabel上icon的变换。

解决方案 »

  1.   

    我的在  mouseClicked(MouseEvent e)     和mouseReleased(MouseEvent e) 中写mylabel.setIcon(icon1);总是出现空指针异常。不知道如何解决。
      

  2.   

    部分代码:
    public class TableDemo extends JPanel implements MouseListener {
        JLabel calv_label,mylab;
        ImageIcon icon2,icon3;
        boolean mad = false;
       public TableDemo() {
          ImageIcon icon2=new ImageIcon("E:/dd的java测试代码/Sstr/off.gif");
          ImageIcon icon=new ImageIcon("E:/dd的java测试代码/Sstr/on.gif");
          
          MyLabel calv_label=new MyLabel("Heeo",icon,JLabel.LEFT);
          MyLabel mylab=new MyLabel("Hll",icon2,JLabel.LEFT);
          this.addMouseListener(this);
          add(calv_label);
    } public void mouseClicked(MouseEvent e) {
          System.out.println("Hweee");
          displayMouse();
          mad=true;
          System.out.println(mad);
          setLayout(null);
          imgView();
         // repaint();
          }  public void imgView(){
    calv_label.setIcon(icon2);
      }
    }
    运行:
    Hweee
    true
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at TableDemo.imgView(TableDemo.java:278)
            at TableDemo.mouseClicked(TableDemo.java:104)
            at java.awt.Component.processMouseEvent(Component.java:5491)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
            at java.awt.Component.processEvent(Component.java:5253)
            at java.awt.Container.processEvent(Container.java:1966)
            at java.awt.Component.dispatchEventImpl(Component.java:3955)
            at java.awt.Container.dispatchEventImpl(Container.java:2024)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212
    )
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
            at java.awt.Container.dispatchEventImpl(Container.java:2010)
            at java.awt.Window.dispatchEventImpl(Window.java:1774)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
    read.java:242)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
    ad.java:163)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
      

  3.   

    calv_label为空对象,查看一下是否成功创建对象
      

  4.   

    calv_label成功创建对象了。它可以显示的。
      

  5.   

    将setLayout(null);去掉试一下,原因应该在此