我试图在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
答案 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");
到部署时,这些资源可能会成为embedded-resource。
在这种情况下,必须由URL
而不是File
访问资源。有关标记的info page,请参阅URL
。