为不同的Jbuttons编写动作

时间:2013-02-01 13:31:39

标签: java swing compiler-errors jbutton actionlistener

在上一个问题中,建议我使用以下格式将特定方法分配给特定的Jbuttons。每个按钮都会出现相同的错误。

public class MealPlannerGUI 
{
    JPanel foodOptions;
    JButton pButton;
    JButton cButton;
    JButton fButton;
    static JComboBox[] box= new JComboBox[3];

    JPanel search;
    JLabel searchL ;
    JTextField foodSearch;
    JButton startSearch;

    JPanel foodProfile;
    JLabel foodLabel;
    JTextArea foodInfo;
    JButton addFood;

    JPanel currentStatus;
    JLabel foodsEaten;
    JComboBox foodsToday;
    JLabel calories;
    JTextArea totalKCal;
    JButton clearInfo;
     //ow Carbs
    FoodListMaker tester = new FoodListMaker();
    public void go()
    {
        JFrame frame = new JFrame();

        foodOptions = new JPanel();
        foodOptions.setBackground(Color.darkGray);

        pButton = new JButton ("Add");
        cButton = new JButton ("Add");
        fButton = new JButton ("Add");

        for (int i = 0; i<3; i++)
        {

            box[0] = new JComboBox (tester.groupProtein());
            box[1] = new JComboBox (tester.groupKCal());
            box[2] = new JComboBox (tester.groupFat());

            //box[3]= new JComboBox (fillOptionPanel(carbFoods.groupCarb())); 
            foodOptions.add(box[i]);
        }

        search = new JPanel();
        search.setBackground(Color.BLUE);
        search.setLayout(new BoxLayout( search, BoxLayout.Y_AXIS));
        searchL = new JLabel("Search for a food:");
        //searchInfo= new JTextArea(10,20);
        startSearch = new JButton ("Search");
        //JScrollPane scrollPane = new JScrollPane(searchInfo); 
        foodSearch = new JTextField(10);
        search.add(searchL);
        search.add(foodSearch);
        //search.add(searchInfo);
        search.add(startSearch);


    foodProfile = new JPanel();
    foodLabel = new JLabel("Food Contents Profile:");
    foodInfo = new JTextArea(10,20);;
    addFood= new JButton ("Add");
    foodsEaten= new JLabel ("Foods consumed today:");
    foodsToday= new JComboBox();
    calories= new JLabel ("Calorie Counter");
    totalKCal = new JTextArea( 1 , 2);
    foodProfile.add( foodLabel);
    foodProfile.add( foodInfo);
    foodProfile.add( addFood);

    currentStatus = new JPanel();
    currentStatus.setLayout(new BoxLayout( currentStatus, BoxLayout.Y_AXIS));
    currentStatus.add( foodsEaten);
    currentStatus.add( foodsToday);
    currentStatus.add( calories);
    currentStatus.add( totalKCal);




        frame.getContentPane().add(BorderLayout.NORTH,foodOptions);
        frame.getContentPane().add(BorderLayout.WEST,search);
        frame.getContentPane().add(BorderLayout.CENTER,foodProfile);
        frame.getContentPane().add(BorderLayout.EAST,currentStatus);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,800);
        frame.setVisible(true);


    }
    startSearch.addActionListener(new ActionListener() 
    {               
        //@Override
        public void actionPerformed(ActionEvent e) 
        {       
            String str = foodSearch.getText();
            searchFoods(str, tester.getFoodList());
        }
    });


    addFood.addActionListener(new ActionListener() 
    {
         //@Override
         public void actionPerformed(ActionEvent e)
         {
            foodsEaten = add(currentFood);
            foodsToday = new JComboBox (foodsConsumed());
            calorieTracker(currentFood.getKCal());
        }
     });


    pButton.addActionListener(new ActionListener() 
    {
        //@Override
        public void actionPerformed(ActionEvent e)
        {
            String foodChoice = (String)box[0].getSelectedItem(); 
            searchFoods(foodChoice, tester.getFoodList());
        }
    });
    cButton.addActionListener(new ActionListener() 
    {
        //@Override
        public void actionPerformed(ActionEvent e)
        {
            String foodChoice = (String)box[1].getSelectedItem(); 
            searchFoods(foodChoice, tester.getFoodList());
        }
    });
    fButton.addActionListener(new ActionListener() 
    {
        //@Override
        public void actionPerformed(ActionEvent e)
        {
            String foodChoice = (String)box[2].getSelectedItem(); 
            searchFoods(foodChoice, tester.getFoodList());
        }
    });

第一个错误是关于@Override如何要求“;”不应该发生。 剩下的错误是指上面代码的结构:

mealplans/MealPlannerGUI.java:104: <identifier> expected
    startSearch.addActionListener(new ActionListener() 
                                 ^
mealplans/MealPlannerGUI.java:104: illegal start of type
    startSearch.addActionListener(new ActionListener() 
                                  ^
mealplans/MealPlannerGUI.java:104: ')' expected
    startSearch.addActionListener(new ActionListener() 
                                     ^
mealplans/MealPlannerGUI.java:104: ';' expected
    startSearch.addActionListener(new ActionListener() 
                                                    ^
mealplans/MealPlannerGUI.java:104: illegal start of type
    startSearch.addActionListener(new ActionListener() 
                                                     ^
mealplans/MealPlannerGUI.java:104: <identifier> expected
    startSearch.addActionListener(new ActionListener() 

2 个答案:

答案 0 :(得分:3)

非声明性语句只能出现在构造函数,方法或静态初始化程序中,而不能出现在类块中。您可以将addActionListener的所有来电转移到initComponents方法。

答案 1 :(得分:0)

我不确定@Override。删除它时会出现同样的错误吗?我不记得覆盖嵌套的ActionListener。

请尝试删除它并告诉我你是否收到同样的错误。