我正在创建一个简单的程序,它可以在鼠标所在的任何位置绘制(显示)我的图像。所以图像随着鼠标箭头移动。
为此,我创建了一个 JFrame
我添加了 MouseMotionListener
和一个 Image
通过名为 Frame
的类进入其中。图像是使用 imageComponent
添加的类。
在 MouseMotionListener
我正在获取鼠标坐标,但无法理解如何提供这些 x
和y
坐标为paintComponent
方法,以及如何在每次移动鼠标时重新绘制它。这是我的代码:
main()
Practice
中的方法类:
public class Practice {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame frame = new Frame();
frame.setSize(500,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
Frame
添加监听器和 ImageComponent
的类到框架。
class Frame extends JFrame{
Frame(){
add(new imageComponent());
addMouseMotionListener(new MouseAdapter(){
public void mouseMoved(MouseEvent me){
int x = me.getX();
int y = me.getY();
repaint();
}
});
}
}
imageComponent
类,从指定路径绘制图像:
class imageComponent extends JComponent{
Image img;
int x,y;
imageComponent(){
img = new ImageIcon("C:\\Users\\Kaushal28\\Desktop\\image.png").getImage();
}
public void paint(Graphics g){
g.drawImage(img, x, y, null);
}
}
在上面的类(class)中,我声明了 x
和y
:鼠标坐标。
我想从听众那里得到这一点,但不明白如何做到这一点。请有人帮忙!
编辑:
如果我添加 mouseMotionListener
至imageComponent
那么它给出 this错误:
最佳答案
让 imageComponent 添加鼠标监听器:
class imageComponent extends JComponent {
Image img;
int x, y;
imageComponent() {
addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent me) {
x = me.getX();
y = me.getY();
repaint();
}
});
img = new ImageIcon(/* path to image */).getImage();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, x, y, null);
}
}
关于java - 无法向位于其他类的 `paintComponent()` 方法提供鼠标坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37522007/