Я пытаюсь закодировать простое Java-приложение, которое в основном предназначено для демонстрации, но по какой-то причине это не сработает. Основная его функция заключается в том, чтобы в основном отслеживать движения мыши и рисовать окно везде, где находится мышь. Я уже работал над некоторым кодом, и это то, что у меня есть. Я делаю что-то неправильно?Рисование видимых JComponents на MouseEvent
Это основной класс
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'. – leeor
Я обновил код, чтобы исправить это. Спасибо за ваш ввод –
Прочитайте учебники, поскольку вы делаете много неправильных предположений. За одно ваше повторное создание и добавление объектов Paint неправильно. Зачем создавать компоненты повторно? –