2016-12-03 28 views
5

Dikdörtgen çizim programı oluşturuyorum. Kare, yalnızca program alt tarafa sürükleniyorsa çizilir. Diğer yönde sürüklese bile, karelerin doğru çizildiğinden emin olmak isterim. Nasıl düzeltebilirim? Lütfen bana yardım edin.Java sürükle ve bırak dikdörtgen fare sürükle ve bırak

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

     } 



    } 

cevap

4

Böyle bir şey deneyin. Başlangıç ​​noktasını dikkatlice belirlemelisiniz. Başlama noktası, 1. ve son fare koordinatlarının min x ve y noktalarıdır. Burada

  1. koordinat ilk alır, bu sorunu çözmek için adım fare clicke x
  2. geçen koordinatlar almak y zaman Y2 fare sürükleme X2,
  3. dakika x almak ve y startpoint koordinatları drawRect Math.min(x,x2);
  4. Dikdörtgenin yüksekliğini ve genişliğini hesaplamak için mutlak koordinat farkı değerini kullanın. Math.abs(x-x2);

kod

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

bunu ifade eder. Teşekkürler –

+0

Bu dikdörtgeni alamayız mı? Son basın her kaybettiğimizde? –