カーソルの移動中に、カーソル位置から水平線と垂直線を引くことに問題があります。カーソルが消えるようです。
私は、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();
}
}