【发布时间】:2015-10-04 20:48:10
【问题描述】:
我正在尝试编写一个主要用于演示的简单 Java 应用程序,但由于某种原因它无法工作。它的主要作用是基本跟踪鼠标的移动,在鼠标所在的地方画一个框。我已经在编写一些代码了,这就是我所拥有的。我是不是做错了什么?
这是主类
package peter;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.MouseInfo;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame extends JPanel implements MouseMotionListener {
private final static JFrame window = new JFrame();
public Frame(){
addMouseMotionListener(this);
setPreferredSize(new Dimension(450, 450));
setBackground(Color.GREEN);
}
private static int mouseX;
private static int mouseY;
public static void main(String[] args){
//Create and set up the window.
JFrame frame = new JFrame("MouseMotionEventDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent newContentPane = new Frame();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e)
{
;
}
@Override
public void mouseMoved(MouseEvent e)
{
JComponent P = new Paintings();
window.add(P);
System.out.println("Mouse moved");
}
public static int getMouseY()
{
return MouseInfo.getPointerInfo().getLocation().y;
}
public static int getMouseX()
{
return MouseInfo.getPointerInfo().getLocation().x;
}
public static Rectangle rectOnMouse()
{
Rectangle rect = new Rectangle(getMouseX(), getMouseY(), 10,10);
return rect;
}
}
这是绘画类
package peter;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
public class Paintings extends JComponent{
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.draw(Frame.rectOnMouse());
}
}
【问题讨论】:
-
你的 'getMouseX()' 正在返回 'y'。
-
我更新了代码来纠正这个问题。感谢您的意见
-
阅读教程,因为你做了很多不正确的假设。一方面,您重复创建和添加绘画对象是错误的。为什么要反复制作组件?
-
使用 Swing 教程开始绘制的 Swing 教程。
-
在这种情况下不要依赖
static,它很快就会陷入一场关于谁在做什么的大规模猜谜游戏。更好地直接传达您的期望/愿望