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