0

パネルにマウスの位置をペイントするプログラムを実行していますが、プログラムは正常に動作しますが、10 秒ほど後にポイントのペイントが停止します...助けはありますか?

   import java.awt.Color;
   import java.awt.Graphics;
   import javax.swing.JPanel;
   import javax.swing.JFrame;
    public class Draw extends JPanel {
public static  int newx;
public static  int newy;

   public void paint(Graphics g) {    

  Mouse mouse = new Mouse();
  mouse.start();

int newx = mouse.x;
int newy = mouse.y;
 g.setColor(Color.blue);  
   g.drawLine(newx, newy, newx, newy);
   repaint();




   }

   public static void main(String[] args) {

  JFrame frame = new JFrame("");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setBackground(Color.white);
  frame.setSize(2000,2000 );
  frame.setVisible(true);
  frame.getContentPane().add(new Draw());
  frame.revalidate();
  frame.getContentPane().repaint();


  }
 }
4

2 に答える 2

2

repaintメソッド内で呼び出すとpaint、無限ループが発生します。Swing タイマーは、コンポーネントで定期的な更新を実行する場合に適しています。

Swing でのカスタム ペインティングでは、 を呼び出すことを忘れずにメソッドpaintComponentpaintオーバーライドする必要がありますsuper.paintComponent

于 2013-03-22T15:16:08.623 に答える
2

public void paint(Graphics g)する必要がありますpublic void paintComponent(Graphics g)

また、このメソッド内で repaint() を呼び出すことは想定されていません。

このメソッドの外にもマウス リスナーを追加する必要があります。

Java チュートリアルからの適応例

public class MouseMotionEventDemo extends JPanel 
                                  implements MouseMotionListener {
    //...in initialization code:
        //Register for mouse events on blankArea and panel.
        blankArea.addMouseMotionListener(this);
        addMouseMotionListener(this);
        ...
    }

    public void mouseMoved(MouseEvent e) {
       Point point = e.getPoint();
       updatePanel(point); //create this method to call repaint() on JPanel.
    }

    public void mouseDragged(MouseEvent e) {
    }


    }
}
于 2013-03-22T15:16:22.580 に答える