1

我在光标移动时从光标位置绘制水平和垂直线时遇到问题。光标似乎消失了。

我已将 MouseInputAdapter 附加到我的摇摆组件,该组件有一个调用 repaint() 的 mouseMoved 方法;

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

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();
}
}
4

0 回答 0