Java得到“非法表达”和“';'预期“方法的错误?

时间:2013-10-25 04:36:43

标签: java

编辑:我想出来并完成了程序(最后)。谢谢大家的帮助!

我正在尝试创建一个简单的绘图程序,用户可以单击单选按钮选择可以通过拖动鼠标在面板上绘制的形状。我只是想让代码执行此操作,因为我想自己想出来并认为我可以。但是我在行上声​​明了方法“public void newShape(String shape){”。我在这一行上得到了4个错误。其中两个是“错误:非法开始表达”,另外两个是“错误:';'预期”。如果有人可以帮助我并告诉我我做错了什么,我会非常感激。

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

public class HW4_Paint extends JFrame {

private static Color color = Color.BLACK; // current selected drawing color
    private static boolean filled = false; // fill mode - "Filled" or "Empty"
    private static String currentShape = "Line"; // current selected shape
    private static ArrayList<Shape> shapes = new ArrayList<Shape>(); // a list of all of the shapes in the current drawing

    public static void main(String[] args) {

        // create the frame and format it
        JFrame frame = new HW4_Paint();
        frame.setTitle("Paint Program");
        frame.setSize(800,500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public HW4_Paint() {

        // create the menu bar
        JMenuBar jmb = new JMenuBar();
        setJMenuBar(jmb);

        // make the file menu
        JMenu fileMenu = new JMenu("File");
        fileMenu.setMnemonic('F');
        jmb.add(fileMenu);

        // make the exit menu item under the file menu
        JMenuItem exitMenuItem = new JMenuItem("Exit", 'X');
        fileMenu.add(exitMenuItem);
        exitMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
        });

        // make the help menu
        JMenu helpMenu = new JMenu("Help");
        helpMenu.setMnemonic('H');
        jmb.add(helpMenu);

        // make the help menu item under the help menu
        JMenuItem helpMenuItem = new JMenuItem("Help", 'H');
        helpMenu.add(helpMenuItem);
        helpMenuItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String message = "This program allows you to draw pictures using different shapes and colors.\n" 
                             + "To change what shape you are drawing with, select the button next to Line, Oval, or Rectangle, depending on which shape you want to draw with.\n"
                             + "If you want the shape to be filled in (only applicable with oval and rectangle), select the checkbox next to Filled.\n"
                             + "To change the color of the shape that you are drawing, click the button of the color that you want to change to.\n"
                             + "To undo the last shape that you drew, click the undo button once. You can repeat this as many times as you want until there are no remaining shapes.\n"
                             + "To clear all of the shapes that you have drawn, click the Clear All button.";

            JOptionPane.showMessageDialog(null, message, "Help", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        // make the about menu item under the help menu
        JMenuItem aboutMenuItem = new JMenuItem("About", 'A');
        helpMenu.add(aboutMenuItem);
        aboutMenuItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String message = "HW4_Paint Program\n\n" + "Written by Joey Drees\n\n" + "CSC 360-001";
            JOptionPane.showMessageDialog(null, message, "About", JOptionPane.INFORMATION_MESSAGE);
        }
        });

        // make the panels that will be added to the frame for the GUI
        JPanel guiPanel = new JPanel();
        guiPanel.setLayout(new BorderLayout());
        JPanel colorPanel = new JPanel(new FlowLayout());
        JPanel buttonPanel = new JPanel(new GridLayout(6,1));
        JPanel drawingPanel = new DrawingPanel();

        // add the guiPanel to the frame and them add the other panels to the guiPanel
        add(guiPanel);
        guiPanel.add(colorPanel, BorderLayout.SOUTH);
        guiPanel.add(buttonPanel, BorderLayout.EAST);
        guiPanel.add(drawingPanel, BorderLayout.CENTER);

    // create and add the buttons that will allow the user to change the color of the shapes
        JButton blackButton = new JButton("Black");
        colorPanel.add(blackButton);
        blackButton.setSelected(true);
        JButton whiteButton = new JButton("White");
        colorPanel.add(whiteButton);
        JButton grayButton = new JButton("Gray");
        colorPanel.add(grayButton);
        JButton redButton = new JButton("Red");
        colorPanel.add(redButton);
        JButton yellowButton = new JButton("Yellow");
        colorPanel.add(yellowButton);
        JButton greenButton = new JButton("Green");
        colorPanel.add(greenButton);
        JButton blueButton = new JButton("Blue");
        colorPanel.add(blueButton);
        JButton newColorButton = new JButton("New Color");
        colorPanel.add(newColorButton);

        // create and add the radio buttons to a button group that will allow the user to change the shape they are drawing with
        ButtonGroup jbtGroup = new ButtonGroup();
        JRadioButton jrbLine = new JRadioButton("Line");
        jrbLine.setMnemonic('L');
        jbtGroup.add(jrbLine);
        buttonPanel.add(jrbLine);
        jrbLine.setSelected(true);
        jrbLine.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent E) {
            currentShape = "Line";
            guiPanel.newShape(currentShape);
            repaint();
        }
        });
        JRadioButton jrbOval = new JRadioButton("Oval");
        jrbOval.setMnemonic('O');
        jbtGroup.add(jrbOval);
        buttonPanel.add(jrbOval);
        jrbOval.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent E) {
            currentShape = "Oval";          
            guiPanel.newShape(currentShape);
            repaint();
        }
        });
        JRadioButton jrbRectangle = new JRadioButton("Rectangle");
        jrbRectangle.setMnemonic('R');
        jbtGroup.add(jrbRectangle);
        buttonPanel.add(jrbRectangle);
        jrbLine.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent E) {
            currentShape = "Rectangle";
            guiPanel.newShape(currentShape);
            repaint();
        }
        });

        // create and add the check box that will allow the user to create filled shapes
        JCheckBox jcbFilled = new JCheckBox("Filled");
        jcbFilled.setMnemonic('F');
        buttonPanel.add(jcbFilled);
        if (jrbLine.isSelected())
        jcbFilled.setEnabled(false);
        else
        jcbFilled.setEnabled(true);

        // create and add the buttons that will allow the user to undo their last shape and clear the whole panel
        JButton undoButton = new JButton("Undo");
        undoButton.setMnemonic('U');
        buttonPanel.add(undoButton);
        JButton clearAllButton = new JButton("Clear All");
        clearAllButton.setMnemonic('C');
        buttonPanel.add(clearAllButton);

        // create the action listener for the undo button
        undoButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (!shapes.isEmpty()) {
            shapes.remove(shapes.size() - 1);
            repaint();
        }
        }
    });

    // create the action listener for the clear all button
        clearAllButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (!shapes.isEmpty()) {
            shapes.clear();
        repaint();
        }
    }
    });

    public void newShape(String shape) {

    switch (shape) {
        case "Line":
            Shape line = new Line(startX, startY, endX, endY);
        shapes.add(line);
        break;
            case "Oval":
        Shape oval = new Oval(startX, startY, endX, endY);
        shapes.add(oval);
        break;
        case "Rectangle":
        Shape rectangle = new Rectangle(startX, startY, endX, endY);
        shapes.add(rectangle);
        break;
        default:
        System.out.println("ERROR. Check logic.");
    }
    }
}
}

private class DrawingPanel extends JPanel {

private int startX, startY, endX, endY;

    public DrawingPanel() { // sets the background to white and adds the required listeners

        setBackground(Color.WHITE);
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
            startX = endX = e.getX();
            startY = endY = e.getY();
        }
        });
        addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {
            endX = e.getX();
            endY = e.getY();
            Shape lastShape = shapes.get(shapes.size()-1);
            lastShape.setEnd(endX, endY);
            repaint();
        }
        });
    }   

public void paintComponent(Graphics g) {

        super.paintComponent(g);
        for (Shape shape: shapes)
        shape.draw(g);
    }
}

5 个答案:

答案 0 :(得分:1)

有两个额外的花括号

}
}

删除这两个

您需要在构造函数}中保留一个HW4_Paint(),并从方法}中删除一个newShape(String shape)

答案 1 :(得分:1)

} // ADD IT HERE

       public void newShape(String shape) {

        switch (shape) {
            case "Line":
                Shape line = new Line(startX, startY, endX, endY);
            shapes.add(line);
            break;
                case "Oval":
            Shape oval = new Oval(startX, startY, endX, endY);
            shapes.add(oval);
            break;
            case "Rectangle":
            Shape rectangle = new Rectangle(startX, startY, endX, endY);
            shapes.add(rectangle);
            break;
            default:
            System.out.println("ERROR. Check logic.");
        }
        }
    } // REMOVE IT FROM HERE
    }

答案 2 :(得分:1)

您似乎在newShape类的构造函数中声明了HW4_Paint方法。

}之前添加public void newShape(String shape) {,并在该方法后删除一个}

看起来应该更像......

        // create the action listener for the clear all button
        clearAllButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (!shapes.isEmpty()) {
                    shapes.clear();
                    repaint();
                }
            }
        });
    } // Add me

    public void newShape(String shape) {

        switch (shape) {
            case "Line":
                Shape line = new Line(startX, startY, endX, endY);
                shapes.add(line);
                break;
            case "Oval":
                Shape oval = new Oval(startX, startY, endX, endY);
                shapes.add(oval);
                break;
            case "Rectangle":
                Shape rectangle = new Rectangle(startX, startY, endX, endY);
                shapes.add(rectangle);
                break;
            default:
                System.out.println("ERROR. Check logic.");
        }
    }
    // Remove a } from here, so you should end with these 3, not 4
}

答案 3 :(得分:0)

欢迎使用StackOverflow!我赞赏你想要自己解决问题的愿望,所以我不会只给你答案。

您收到该消息是因为newShape()位置错误。也许它的范围太远了?也许它太过分了?检查程序在IDE中的缩进 - 它在哪里?你期望它在那里吗?

答案 4 :(得分:0)

据我所知,错误如&#34;非法开始表达&#34;或&#34;&#39;;&#39;预期&#34;通常意味着你对{}做错了。我有38个与实际代码行完全无关的错误,但都是由于遗忘而导致的。