1. المدير العام

    المدير العام أدارة موقع أكتب كود

    رسم أشكال على الصورة بداخل النافذة مع تحديد الأبعاد للرسم

    أقدم لكم المسابقة البرمجية الثانية .. من منتديات أكتب كود .. لتحسين قدراتك البرمجية

    :: المطلوب ::
    صورة فى النافذة مع أمكانية رسم أشكال عليها بالفارة عن طريق السحب والأفلات
    مع تحديد أبعاد مؤشر الفارة فى النافذة .. تحديد X و Y

    [​IMG]

    الصورة الموجودة فى الفورم لأستخدامها فى المسابقة
    [​IMG]

    لمزيد من التطبيقات والمسابقات البرمجية .. يمكنك دائما زيارة منتديات أكتب كود (( iTabCode ))
     
  2. المدير العام

    المدير العام أدارة موقع أكتب كود

    حل المسابقة البرمجية .. إليكم الكود البرمجى
    كود:
    import javax.swing.BoxLayout;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.event.MouseInputAdapter;
    import java.awt.*;
    import java.awt.event.MouseEvent;
    
    
    public class SelectionDemo {
      JLabel label;
    
      static String starFile = "starfield.gif";
    
      private void buildUI(Container container, ImageIcon image) {
        container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
    
        SelectionArea area = new SelectionArea(image, this);
        container.add(area);
    
        label = new JLabel("Drag within the image.");
        label.setLabelFor(area);
        container.add(label);
    
        //Align the left edges of the components.
        area.setAlignmentX(Component.LEFT_ALIGNMENT);
        label.setAlignmentX(Component.LEFT_ALIGNMENT); //redundant
      }
    
      public void updateLabel(Rectangle rect) {
        int width = rect.width;
        int height = rect.height;
    
        //Make the coordinates look OK if a dimension is 0.
        if (width == 0) {
          width = 1;
        }
        if (height == 0) {
          height = 1;
        }
    
        label.setText("Rectangle goes from (" + rect.x + ", " + rect.y
            + ") to (" + (rect.x + width - 1) + ", "
            + (rect.y + height - 1) + ").");
      }
    
      /** Returns an ImageIcon, or null if the path was invalid. */
      protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = SelectionDemo.class.getResource(path);
        if (imgURL != null) {
          return new ImageIcon(imgURL);
        } else {
          System.err.println("Couldn't find file: " + path);
          return null;
        }
      }
    
      /**
       * Create the GUI and show it. For thread safety, this method should be
       * invoked from the event-dispatching thread.
       */
      private static void createAndShowGUI() {
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);
    
        //Create and set up the window.
        JFrame frame = new JFrame("SelectionDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        //Set up the content pane.
        SelectionDemo controller = new SelectionDemo();
        controller.buildUI(frame.getContentPane(), createImageIcon(starFile));
    
        //Display the window.
        frame.pack();
        frame.setVisible(true);
      }
    
      public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            createAndShowGUI();
          }
        });
      }
    
      private class SelectionArea extends JLabel {
        Rectangle currentRect = null;
    
        Rectangle rectToDraw = null;
    
        Rectangle previousRectDrawn = new Rectangle();
    
        SelectionDemo controller;
    
        public SelectionArea(ImageIcon image, SelectionDemo controller) {
          super(image); //This component displays an image.
          this.controller = controller;
          setOpaque(true);
          setMinimumSize(new Dimension(10, 10)); //don't hog space
    
          MyListener myListener = new MyListener();
          addMouseListener(myListener);
          addMouseMotionListener(myListener);
        }
    
        private class MyListener extends MouseInputAdapter {
          public void mousePressed(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            currentRect = new Rectangle(x, y, 0, 0);
            updateDrawableRect(getWidth(), getHeight());
            repaint();
          }
    
          public void mouseDragged(MouseEvent e) {
            updateSize(e);
          }
    
          public void mouseReleased(MouseEvent e) {
            updateSize(e);
          }
    
          /*
           * Update the size of the current rectangle and call repaint.
           * Because currentRect always has the same origin, translate it if
           * the width or height is negative.
           *
           * For efficiency (though that isn't an issue for this program),
           * specify the painting region using arguments to the repaint()
           * call.
           *
           */
          void updateSize(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            currentRect.setSize(x - currentRect.x, y - currentRect.y);
            updateDrawableRect(getWidth(), getHeight());
            Rectangle totalRepaint = rectToDraw.union(previousRectDrawn);
            repaint(totalRepaint.x, totalRepaint.y, totalRepaint.width,
                totalRepaint.height);
          }
        }
    
        protected void paintComponent(Graphics g) {
          super.paintComponent(g); //paints the background and image
    
          //If currentRect exists, paint a box on top.
          if (currentRect != null) {
            //Draw a rectangle on top of the image.
            g.setXORMode(Color.white); //Color of line varies
            //depending on image colors
            g.drawRect(rectToDraw.x, rectToDraw.y, rectToDraw.width - 1,
                rectToDraw.height - 1);
    
            controller.updateLabel(rectToDraw);
          }
        }
    
        private void updateDrawableRect(int compWidth, int compHeight) {
          int x = currentRect.x;
          int y = currentRect.y;
          int width = currentRect.width;
          int height = currentRect.height;
    
          //Make the width and height positive, if necessary.
          if (width < 0) {
            width = 0 - width;
            x = x - width + 1;
            if (x < 0) {
              width += x;
              x = 0;
            }
          }
          if (height < 0) {
            height = 0 - height;
            y = y - height + 1;
            if (y < 0) {
              height += y;
              y = 0;
            }
          }
    
          //The rectangle shouldn't extend past the drawing area.
          if ((x + width) > compWidth) {
            width = compWidth - x;
          }
          if ((y + height) > compHeight) {
            height = compHeight - y;
          }
    
          //Update rectToDraw after saving old value.
          if (rectToDraw != null) {
            previousRectDrawn.setBounds(rectToDraw.x, rectToDraw.y,
                rectToDraw.width, rectToDraw.height);
            rectToDraw.setBounds(x, y, width, height);
          } else {
            rectToDraw = new Rectangle(x, y, width, height);
          }
        }
      }
    }
     
جاري تحميل الصفحة...