2016-12-03 140 views
5

我正在創建一個矩形繪圖程序。只有當程序拖動到底部時才繪製正方形。 即使在另一個方向拖動,我想確保正確繪製正方形。 我該如何解決它? 請幫幫我。Java swing在鼠標拖放中繪製矩形

**DrawRect.java** 


    import javax.swing.*; 

    import java.awt.*; 

    import java.awt.event.*; 

    public class DrawRect extends JPanel { 

     int x, y, w, h; 
     public static void main(String [] args) { 
      JFrame f = new JFrame("Draw Box Mouse 2"); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setContentPane(new DrawRect()); 
      f.setSize(300, 300); f.setVisible(true); 
     } 



     DrawRect() { 
      x = y = w = h = 0; // 
      MyMouseListener listener = new MyMouseListener(); 
      addMouseListener(listener); 
      addMouseMotionListener(listener);  
     } 

     public void setStartPoint(int x, int y) { 
      this.x = x; this.y = y; 
     } 

     public void setEndPoint(int x, int y) { 
      w = Math.abs(this.x - x); 
      h = Math.abs(this.y - y); 
     } 

     class MyMouseListener extends MouseAdapter { 
      public void mousePressed(MouseEvent e) { 
       setStartPoint(e.getX(), e.getY()); 
      } 
      public void mouseDragged(MouseEvent e) { 
       setEndPoint(e.getX(), e.getY()); repaint(); 
      } 
      public void mouseReleased(MouseEvent e) { 
       setEndPoint(e.getX(), e.getY()); repaint(); 
      } 
     } 

     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.RED); 

Please help me. 
      g.drawRect(x, y, w, h); 

     } 



    } 

回答

4

嘗試類似這樣的事情。 您必須仔細確定起點。起始點是第一個和最後一個鼠標座標的最小x和y點。

這裏是要解決這個問題

  1. 採取第一座標的步驟當鼠標clicke的x,y
  2. 採取最後座標時鼠標拖動X2,Y2
  3. 採取分鐘x和y座標作爲起始點for drawRect Math.min(x,x2);
  4. 使用座標差的絕對值來計算矩形的高度和寬度。 Math.abs(x-x2);

代碼

import javax.swing.*; 

import java.awt.*; 

import java.awt.event.*; 

    public class DrawRect extends JPanel { 

     int x, y, x2, y2; 

     public static void main(String[] args) { 
      JFrame f = new JFrame("Draw Box Mouse 2"); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setContentPane(new DrawRect()); 
      f.setSize(300, 300); 
      f.setVisible(true); 
     } 

     DrawRect() { 
      x = y = x2 = y2 = 0; // 
      MyMouseListener listener = new MyMouseListener(); 
      addMouseListener(listener); 
      addMouseMotionListener(listener); 
     } 

     public void setStartPoint(int x, int y) { 
      this.x = x; 
      this.y = y; 
     } 

     public void setEndPoint(int x, int y) { 
      x2 = (x); 
      y2 = (y); 
     } 

     public void drawPerfectRect(Graphics g, int x, int y, int x2, int y2) { 
      int px = Math.min(x,x2); 
      int py = Math.min(y,y2); 
      int pw=Math.abs(x-x2); 
      int ph=Math.abs(y-y2); 
      g.drawRect(px, py, pw, ph); 
     } 

     class MyMouseListener extends MouseAdapter { 

      public void mousePressed(MouseEvent e) { 
       setStartPoint(e.getX(), e.getY()); 
      } 

      public void mouseDragged(MouseEvent e) { 
       setEndPoint(e.getX(), e.getY()); 
       repaint(); 
      } 

      public void mouseReleased(MouseEvent e) { 
       setEndPoint(e.getX(), e.getY()); 
       repaint(); 
      } 
     } 

     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.RED); 
      drawPerfectRect(g, x, y, x2, y2); 
     } 

    } 
+1

我指它。謝謝 –

+0

我們不能拿那個矩形嗎?每次我們按最後一次輸球? –