Java 在mousemoded中调用repaint时光标消失?

Java 在mousemoded中调用repaint时光标消失?,java,swing,graphics,paintcomponent,mousemove,Java,Swing,Graphics,Paintcomponent,Mousemove,当光标移动时,我无法从光标位置绘制水平线和垂直线。光标似乎消失了 我在swing组件上附加了一个MouseInputAdapter,它有一个mouseMoved方法,调用repaint() 调用repaint将导致调用paintComponent(图形g)。在paintComponent i中,绘制水平线和垂直线: Dimension dim = getSize(); g2.setColor(Color.white); g2.fillRect(0, 0, dim.width, dim.heigh

当光标移动时,我无法从光标位置绘制水平线和垂直线。光标似乎消失了

我在swing组件上附加了一个MouseInputAdapter,它有一个mouseMoved方法,调用repaint()

调用repaint将导致调用paintComponent(图形g)。在paintComponent i中,绘制水平线和垂直线:

Dimension dim = getSize();
g2.setColor(Color.white);
g2.fillRect(0, 0, dim.width, dim.height);
g2.setColor(Color.black);
Point pos = this.getMousePosition();
g2.draw(new Line2D.Double(0, pos.y, dim.getWidth(), pos.y));
g2.draw(new Line2D.Double(pos.x, 0, pos.x, dim.getHeight()));
以下是一个屏幕截图:

光标应该位于大水平线和垂直线之间的白色区域,并且应该位于大数字1.2434307的左侧

当我用鼠标移动光标时,我可以看到光标(十字线)闪烁,这使我相信我的绘制方法是在光标上绘制

有人知道问题出在哪里吗

根据要求,我添加了一些测试代码

public class TestApp extends JFrame {
public TestApp() {
    super("TestApp");

    this.getContentPane().setLayout(new BorderLayout());
    this.getContentPane().add(new CustomComponent(), BorderLayout.CENTER);
    this.setSize(300, 300);
    this.setVisible(true);

}

class CustomComponent extends JComponent {
    public CustomComponent() {
        setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

        MouseInputAdapter mia = new MouseInputAdapter() {

            @Override
            public void mouseMoved(MouseEvent e) {
                repaint();
            }

        };

        addMouseMotionListener(mia);
        addMouseListener(mia);
    }

    @Override
    public void paintComponent(Graphics g) {
        Dimension dim = getSize();
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g2.setColor(Color.white);
        g2.fillRect(0, 0, dim.width, dim.height);


        g2.setColor(Color.black);
        Point pos = this.getMousePosition();
        if (pos != null) {

            g2.draw(new Line2D.Double(0, pos.y, dim.getWidth(), pos.y));
            g2.draw(new Line2D.Double(pos.x, 0, pos.x, dim.getHeight()));
            g2.drawString("where is my cursor?", pos.x, pos.y);
        }
    }
}

public static void main(String[] args) {
    new TestApp();
}
}

谢谢,我刚刚添加了一个sscce。当我运行您的程序时,您的光标似乎始终存在。有时它是黑色的,特别是当我移动鼠标时,有时当光标在线条上时它是部分白色的,因为它似乎与它所覆盖的线条异或。顺便说一下,感谢SSCCE,1+!这就解释了,光标使用的xor ing很奇怪,我的十字光标是一个1像素宽的简单黑十字。Xor看到光标下方的黑线,因此显示为白色光标,但由于背景也是白色,因此完全消失。通过使用空光标解决此问题;)谢谢你的帮助!没关系,你已经解决了你的问题,这才是最重要的。