2012-03-14 5 views
2

私は、開始位置でマウスをクリックして終了位置でマウスを放すことで、直線を描画する機能をアプリケーションに追加したいと考えています。最終的にリリースされるまでマウスが動くと線が移動するはずです。 Microsoft Paintアプリケーションを使用して線を描画する方法と同様です。マウスを移動するとJavaの描画線

これを実装して、その矩形領域に既に描画されている可能性のある他のものを再描画せずに行が再描画されるようにするにはどうすればよいですか?

+1

あなたはSwingコンポーネントを使用することができます。..線を移動しますか?もしそうなら、再塗りつぶしを心配しないで、フレームワークがそれを世話するようにしてください。 paintComponentメソッドをオーバーライドし、線を描画します。その後、マウスリスナで開始点と終了点を設定する方法を学ぶことができます。 – davidfrancis

答えて

2

MouseListenerインターフェイスはこれのためのあなたの友人です。 mousePressed関数とmouseReleased関数を実装することができます。 MouseListenerインタフェースは、あなたがで遊ぶことができ、次のメソッドがあります。

public void mouseEntered(MouseEvent mouse){ } 
public void mouseExited(MouseEvent mouse){ } 
public void mousePressed(MouseEvent mouse){ } 
public void mouseReleased(MouseEvent mouse){ } 
12

は(ドラッグ)マウスが移動したように、画面上の赤い線を描画...これを試してみてください。

public static void main(String args[]) throws Exception { 
    JFrame f = new JFrame("Draw a Red Line"); 
    f.setSize(300, 300); 
    f.setLocation(300, 300); 
    f.setResizable(false); 
    JPanel p = new JPanel() { 
     Point pointStart = null; 
     Point pointEnd = null; 
     { 
      addMouseListener(new MouseAdapter() { 
       public void mousePressed(MouseEvent e) { 
        pointStart = e.getPoint(); 
       } 

       public void mouseReleased(MouseEvent e) { 
        pointStart = null; 
       } 
      }); 
      addMouseMotionListener(new MouseMotionAdapter() { 
       public void mouseMoved(MouseEvent e) { 
        pointEnd = e.getPoint(); 
       } 

       public void mouseDragged(MouseEvent e) { 
        pointEnd = e.getPoint(); 
        repaint(); 
       } 
      }); 
     } 
     public void paint(Graphics g) { 
      super.paint(g); 
      if (pointStart != null) { 
       g.setColor(Color.RED); 
       g.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y); 
      } 
     } 
    }; 
    f.add(p); 
    f.setVisible(true); 
} 
+0

どのようにピクセルを保存しますか? – trs

+0

実際には、@ davidfrancisのように、マウスがダウンしているときに線を引いて、通常のスイングを再描画させてください。私はあなたのために働くサンプルを添付します。 – Java42

+0

さて、私はあなたのための作業例を更新しました。お楽しみください... – Java42

1
JFrame frame = new JFrame("Lines"); 

    frame.add(new JComponent() { 
     private Shape line = null; 
     { 
      line = new Line2D.Double(100, 100, 200, 200); 
      prevPoint = new Point(); 
      newPoint = new Point(); 

      MouseAdapter mouseAdapter = new MouseAdapter() { 
       @Override 
       public void mousePressed(MouseEvent e) { 
        prevPoint = e.getPoint(); 
        System.out.println("Prev Point=" + prevPoint.toString()); 
        repaint(); 
       } 

       @Override 
       public void mouseDragged(MouseEvent e) { 
        int dx = 0; 
        int dy = 0; 

        dx = (int) (prevPoint.x - e.getPoint().getX()); 
        dy = (int) (prevPoint.y - e.getPoint().getY()); 

        Line2D shape = (Line2D) line; 

        int x1 = (int) (shape.getX1() - dx); 
        int y1 = (int) (shape.getY1() - dy); 

        int x2 = (int) (shape.getX2() - dx); 
        int y2 = (int) (shape.getY2() - dy); 

        Point startPoint = new Point(x1, y1); 
        Point endPoint = new Point(x2, y2); 

        if (shape != null) { 
         shape.setLine(startPoint, endPoint); 
         prevPoint = e.getPoint(); 
         repaint(); 
        } 
       } 

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

      }; 
      addMouseListener(mouseAdapter); 
      addMouseMotionListener(mouseAdapter); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setPaint(Color.BLUE); 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 
      if (line != null) { 
       g2d.draw(line); 
      } 
     } 
    }); 
    frame.setSize(650, 400); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

マウスが移動したように、これは ・ホープ、このことができます。..

関連する問題