문제

I'm trying to complete a project for school. It is partially completed when I get it. I cannot test anything I've written (except the layout, by commenting-out the error). I have an error for "Rect cannot be resolved to a type". Thinking that I did something wrong, I found this complete code posted online, and thought I'd see what differences there are. I get the same errors here...lots of them. What gives? Note* I'm not trying to pass this program in, just trying to see how it works, since I want mine to do the same thing.

    /** 
     * DrawRects.java
     * 
     * Allows the user to enter a number of rectangles using mouse input.
     * Keeps previous rectangles around.
     * Inspired by a C++ class demo by THC
     * 
     * @author Scot Drysdale on 4/19/00.  Modified to a JApplet 1/16/2012
     * Modified to add a "clear" button and use an ArrayList on 1/18/2012
     */


    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;

    public class DrawRects extends JApplet implements MouseListener,
            MouseMotionListener {
        private static final long serialVersionUID = 1L;
        private Point pressedPoint = null; // place where mouse pressed down
        private Rect currentRect = null; // rectangle being dragged.
        private ArrayList<Rect> boxes = new ArrayList<Rect>(); // a list of rectangles

        private static final Color[] colors = { Color.red, Color.cyan, Color.magenta,
                Color.yellow };
        private int colorIndex = 0; // index into colors of current color
        private JButton clearButton; // Button to clear the screen

        private static final int APPLET_WIDTH = 520; // Width of the applet
        private static final int APPLET_HEIGHT = 550; // Height of the applet
        private static final int CANVAS_WIDTH = 500; // Width of the canvas
        private static final int CANVAS_HEIGHT = 500; // Height of the applet

        /**
         * Initializes the applet
         */
        public void init() {
            addMouseListener(this);
            addMouseMotionListener(this);
            setSize(APPLET_WIDTH, APPLET_HEIGHT);

            Container cp = getContentPane(); // Content pane holds components
            cp.setLayout(new FlowLayout()); // Fill left to right, top to bottom

            Canvas canvas = new Canvas();
            cp.add(canvas); // The canvas is the only component

            // Make a button to clear the canvas, set the button's background
            // to cyan, and add it to the content pane.
            clearButton = new JButton("Clear");
            clearButton.setBackground(Color.cyan);
            clearButton.addActionListener(canvas);
            cp.add(clearButton);

            setVisible(true); // Makes the applet (and its components) visible
        }

        // Captures the position at which the mouse is initially pressed.
        // It creates a new currentRect object, because the previous one
        // will have been added to the ListOfRects.
        public void mousePressed(MouseEvent event) {
            pressedPoint = event.getPoint();
            currentRect = new Rect(pressedPoint.x, pressedPoint.y, 0, 0, Color.black);
        }

        /**
         * Gets the current position of the mouse as it is dragged and draws a
         * rectangle with this point and pressedPoint as corners. This creates a
         * rubberbanding rectangle effect.
         * 
         * @param event the event that caused this callback
         */
        public void mouseDragged(MouseEvent event) {
            if (currentRect != null) { // make sure that currentRect exists
                Point pt = event.getPoint();
                currentRect.setX(Math.min(pt.x, pressedPoint.x));
                currentRect.setY(Math.min(pt.y, pressedPoint.y));
                currentRect.setWidth(Math.abs(pt.x - pressedPoint.x));
                currentRect.setHeight(Math.abs(pt.y - pressedPoint.y));
                repaint();
            }
        }

        /**
         * Done dragging mouse, so add current Rect to ListOfRects.
         * 
         * @param event the event that caused this callback
         */
        public void mouseReleased(MouseEvent event) {
            if (currentRect != null) { // make sure that currentRect exists
                currentRect.setColor(colors[colorIndex]);
                colorIndex = (colorIndex + 1) % colors.length;
                boxes.add(currentRect);
                currentRect = null; // currentRect now in the list, so can't reuse it
            }
            repaint();
        }

        // Provide empty definitions for unused event methods.
        public void mouseClicked(MouseEvent event) {}
        public void mouseEntered(MouseEvent event) {}
        public void mouseExited(MouseEvent event) {}
        public void mouseMoved(MouseEvent event) {}

        /**
         * The canvas to draw upon
         */
        private class Canvas extends JPanel implements ActionListener {
            private static final long serialVersionUID = 1L;

            /**
             * Constructor to choose preferred size
             */
            public Canvas() {
                // Canvas is a subclass of JPanel. The way we set the size of
                // a JPanel is by the setPreferredSize method. It takes a reference to
                // a Dimension object, which just packages together a width and height.
                setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
            }

            /**
             * Draw the rectangles
             * 
             * @param page the graphics object to draw on
             */
            public void paintComponent(Graphics page) {
                super.paintComponent(page);

                page.setColor(Color.black);
                page.drawRect(0, 0, CANVAS_WIDTH - 1, CANVAS_HEIGHT - 1); // Draw border

                for (Rect rectangle : boxes)        // Draw the saved rectangles
                    rectangle.fill(page);

                if (currentRect != null) // Draw the rectangle being dragged out (if exists)
                    currentRect.draw(page);
            }

            /**
             * Handle the button - provide an actionListener
             * @param event the event that caused this callback
             */
            public void actionPerformed(ActionEvent event) {
                boxes.clear();
                repaint();
            }
        }
    }
도움이 되었습니까?

해결책

There's nothing in the SDK named Rect.

There is, of course, java.awt.Rectangle, which may help you on your quest.

However, it looks like Rect was just some other class in the project you grabbed that you forgot to grab the source for (or the author didn't make it available).

It wouldn't require a special import or anything if it was in the same package as DrawRects (the default package, by the looks of it) or if it was, say, an inner class of DrawRects (which it's not).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top