2016-12-03 18 views
5

Tôi đang tạo một chương trình vẽ hình chữ nhật. Hình vuông chỉ được vẽ nếu chương trình đang kéo xuống phía dưới cùng. Ngay cả khi kéo theo hướng khác, tôi muốn đảm bảo rằng hình vuông được vẽ chính xác. Làm cách nào để khắc phục sự cố? Xin hãy giúp tôi.Hình chữ nhật xoay hình chữ nhật trong kéo và thả chuột

**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); 

     } 



    } 

Trả lời

4

Hãy thử một cái gì đó như thế này. bạn phải xác định điểm bắt đầu một cách cẩn thận. Điểm bắt đầu là điểm x và y của tọa độ chuột đầu tiên và cuối cùng.

đây là các bước để giải quyết vấn đề này

  1. mất đầu tiên phối hợp khi chuột clicke x, y
  2. lấy tọa độ cuối cùng khi chuột kéo x2, y2
  3. mất phút x và y tọa độ như startpoint cho drawRect Math.min(x,x2);
  4. sử dụng giá trị tuyệt đối của chênh lệch tọa độ để tính chiều cao và chiều rộng của hình chữ nhật. Math.abs(x-x2);

đang

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

tôi tham khảo nó. Cảm ơn bạn –

+0

Chúng ta không thể chụp hình chữ nhật đó? mỗi khi chúng ta nhấn lần cuối cùng bị mất? –

Các vấn đề liên quan