2016-12-03 10 views
5

मैं एक आयताकार ड्राइंग प्रोग्राम बना रहा हूं। वर्ग केवल तभी खींचा जाता है जब प्रोग्राम नीचे की तरफ खींच रहा हो। भले ही दूसरी दिशा में खींचें, मैं यह सुनिश्चित करना चाहता हूं कि वर्ग सही ढंग से खींचे जाए। मैं इसे कैसे ठीक कर सकता हूं? कृपया मेरी मदद करें।माउस स्विंग ड्रॉ आयत में माउस ड्रैग और ड्रॉप

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

ऐसा कुछ करने का प्रयास करें। आपको प्रारंभ बिंदु सावधानी से निर्धारित करना होगा। प्रारंभ बिंदु 1 और अंतिम माउस निर्देशांक के न्यूनतम x और y बिंदु है।

यहाँ इस समस्या

  1. पहले ले समन्वय का समाधान करने के लिए कदम है जब माउस clicke एक्स, वाई
  2. पिछले निर्देशांक ले जब माउस खींचें x2, y2
  3. ले मिनट x और y startpoint के रूप में निर्देशांक 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

क्या हम उस आयत को नहीं ले सकते? हर बार जब हम आखिरी खो देते हैं? –