java - 大括号阻止编译

标签 java swing exception

我目前正在从头开始创建一个 GUI,并且我在一个页面上包含多个类。不幸的是,有些东西阻止我观看类(class),我认为这与左括号和右括号有关。谁能帮我解决我出错的地方,这样我以后就不再这样做了?我的程序在 RentalPanel 类中引发异常。由于某种原因它没有看到它。

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

public class MavGUI2 extends JFrame 
{

    private JDesktopPane theDesktop;

    public MavGUI2()
    {
        super("Mav Rental System");

        theDesktop = new JDesktopPane();

        JMenuBar bar = new JMenuBar();

        JMenu addMenu = new JMenu("Add");
        JMenuItem addRental = new JMenuItem ("Add Rental");
        JMenuItem addCustomer = new JMenuItem("Add Customer");
        addMenu.add(addRental);
        addMenu.add(addCustomer);

        bar.add(addMenu);

        add(theDesktop);
        setJMenuBar(bar);

        addCustomer.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                JInternalFrame frame = new JInternalFrame("Add Customer", true, true, true, true);
                CustomerPanel cp = new CustomerPanel();
                frame.add(cp);
                frame.pack();
                theDesktop.add(frame);
                frame.setVisible(true);
            }
        });

        addRental.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                JInternalFrame frame = new JInternalFrame("Add Rental", true, true, true, true);
                RentalPanel rp = new RentalPanel();
                frame.add(rp);
                frame.pack();
                theDesktop.add(frame);
                frame.setVisible(true);
            }
        });

        JMenu exitMenu = new JMenu("Exit");
        JMenuItem calCharges = new JMenuItem("Calculate Charges");
        JMenuItem close = new JMenuItem("Close");

        close.addActionListener(new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                        System.exit(0);
                    }
                });

        calCharges.addActionListener(new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    System.out.println("Calculations");
                    }
            }); 

        exitMenu.add(calCharges);
        exitMenu.add(close);

        bar.add(exitMenu);
        add(theDesktop);
        setJMenuBar(bar);




    }

    public static void main(String args[])
    {
        MavGUI2 m = new MavGUI2();
        m.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        m.setSize(500,500);
        m.setVisible(true);

    }

    class CustomerPanel extends Panel
    {
        private JLabel nameLabel;
        private JLabel streetLabel;
        private JLabel cityLabel;
        private JLabel stateLabel;
        private JLabel creditLabel;
        private JLabel zipLabel;
        private JLabel submitLabel;
        private JButton submitButton;

        private JTextField nameField;
        private JTextField streetField;
        private JTextField cityField;
        private JTextField stateField;
        private JTextField creditField;
        private JTextField zipField;

        public CustomerPanel()
        {
            setLayout(new GridLayout(7,2));

            nameLabel = new JLabel(" Enter name: ");
            streetLabel = new JLabel(" Enter street: ");
            cityLabel = new JLabel(" Enter city: ");
            stateLabel = new JLabel (" Enter state: ");
            zipLabel = new JLabel(" Enter zip: ");
            creditLabel = new JLabel(" Enter credit card number: ");
            submitLabel = new JLabel(" Click when done!"); 

            nameField = new JTextField(20);
            streetField = new JTextField(20);
            cityField = new JTextField(20);
            stateField = new JTextField(20);
            zipField = new JTextField(20);
            creditField = new JTextField(20);
            submitButton = new JButton(" SUBMIT ");


            MyListener handler = new MyListener();
            submitButton.addActionListener(handler);

            add(nameLabel);
            add(nameField);
            add(streetLabel);
            add(streetField);
            add(cityLabel);
            add(cityField);
            add(stateLabel);
            add(stateField);
            add(zipLabel);
            add(zipField);
            add(creditLabel);
            add(creditField);
            add(submitLabel);
            add(submitButton);

        }

        class MyListener implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                System.out.printf(nameField.getText() +" " + streetField.getText() + " "+ cityField.getText());

                nameField.setText("");
                streetField.setText("");
                cityField.setText("");
                stateField.setText("");
                zipField.setText("");
                creditField.setText("");
                nameField.requestFocus();
            }       
        }

        class RentalPanel extends Panel
        {
            private JLabel custNameLabel;
            private JLabel numDaysLabel;
            private JLabel perDayLabel;
            private JButton submit2Button;
            private JLabel submit2Label;

            private JTextField custNameField;
            private JTextField numDaysField;
            private JTextField perDayField;

            private JCheckBox furnBox;
            private JCheckBox elecBox;
            private JComboBox<String> furnType;
            String types[] = {"BED", "COUCH", "CHAIR"};

            private JComboBox<String> elecType;
            String type2[] = {"COMPUTER","TV"};

            public RentalPanel()
            {
                setLayout(new GridLayout(6,2));
                ButtonGroup group =  new ButtonGroup();

                furnBox = new JCheckBox(" Furniture ");
                elecBox = new JCheckBox(" Electronic");

                group.add(furnBox);
                group.add(elecBox);

                custNameLabel = new JLabel(" Enter customer name");
                numDaysLabel = new JLabel(" Enter number of days");
                perDayLabel = new JLabel(" Enter price per day");
                submit2Label = new JLabel(" Click when done");
                submit2Button = new JButton(" SUBMIT");

                custNameField = new JTextField(20);
                numDaysField = new JTextField(20);
                perDayField = new JTextField(20);

                furnType = new JComboBox<String>(types);
                elecType = new JComboBox<String>(type2);

                add(custNameLabel);
                add(custNameField);
                add(furnBox);
                add(elecBox);
                add(numDaysLabel);
                add(numDaysField);
                add(perDayLabel);
                add(perDayField);
                add(furnType);
                add(elecType);
                add(submit2Label);
                add(submit2Button);



            }//closes Rental Panel constructor

        }//close rental panel
    }// closes customer panel
}//closes MAVGUI

Blockquote

最佳答案

问题是,RentalPanel 类是 CustomerPanel 内部的非静态内部类。所以你不能直接从 MavGUI2 类访问它。将 RentalPanelCustomerPanel 类设为静态内部类,将解决编译错误。

事实上,建议将它们移至单独的文件中。

关于java - 大括号阻止编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353429/

相关文章:

json - 呈现为JSON时Grails中缺少方法异常

Java XStream 无法在 Ubuntu 上解决

java - 使用Java生成自增数

java - JComboBox 具有 4 列和 4 行数据[][] 形式

java - 为什么我的下载进度条会多次触发同一个事件?

spring - 无法重启 Liferay : numerous BeanCreationException-s

java - 线程 "main"java.lang.NoClassDefFoundError : org/mockito/Mockito 中的异常

java - java中如何让一个线程读取两个单独线程的值

java - setIcon 有效,而 setDisabledIcon 无效 - 为什么?

c# - Web API 2 中的 ExceptionFilter 与 ExceptionLogger 与 ExceptionHandler