如果是mouseReleased事件,如何将图像添加到JPanel

时间:2013-09-29 07:33:13

标签: java image swing jlabel mouselistener

我试图在java中构建一个基本程序,它创建一个带JPanel的窗口,当用户点击JPanel时会显示一个图像,但是当运行应用程序并点击JPanel时,没有显示任何内容...

这里是代码......

// driver.java

import javax.swing.JFrame;

public class driver {

    public static void main(String[] args) {        
        Gui obj = new Gui();
        obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        obj.setSize(400, 400);
        obj.setVisible(true);   
    }
}

//GUI.java
import javax.swing.*;    
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Gui extends JFrame{    

    public JPanel panel;
    public ImageIcon img;       

    public Gui(){       
        panel = new JPanel();       
        panel.setBackground(Color.DARK_GRAY);       
        img = new ImageIcon("cross.png");
        panel.addMouseListener(new MouseAdapter(){
                public void mouseReleased(MouseEvent e){
                    panel.add(new JLabel(img));
                    System.out.println("Mouse Click detected");
                }}
                );      
        add(panel);
    }       
}

//更新了Gui.java

import javax.swing.*;    
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

公共类Gui扩展了JFrame {

public JPanel panel;
public ImageIcon img;
public final JLabel label;

public Gui(){       
    panel = new JPanel();
    label = new JLabel();
    panel.add(label);   

    img = new ImageIcon(getClass().getResource("res/cross.png"));
    panel.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent e){
                label.setIcon(img);
                System.out.println("Mouse Click detected");
            }}
            );
    add(panel);
}   

}

注意:这是我的项目的方式 organised

1 个答案:

答案 0 :(得分:2)

更改..

    // ..
    panel.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent e){
                panel.add(new JLabel(img));
                System.out.println("Mouse Click detected");
            }}
            );      

To(类似于 - 未经测试的):

    // ..
    final JLabel label = new JLabel();
    panel.add(label);
    panel.addMouseListener(new MouseAdapter(){
            public void mouseReleased(MouseEvent e){
                label.setIcon(img);
                System.out.println("Mouse Click detected");
            }}
            );      

这是ImageViewer中使用的基本技术,虽然它改变了Swing Timer上的图像,而不是鼠标点击。


当然,使用JButton图标而不是JLabel / MouseListener更容易。 JButton不需要任何侦听器来更改图标,并且适用于鼠标和键盘活动。例如。如this answer中所示。


img = new ImageIcon("cross.png");

到部署时,这些资源可能会成为

在这种情况下,必须由URL而不是File访问资源。有关标记的info page,请参阅URL