首页 > 解决方案 > Container 类型中的方法 add(Component) 不适用于参数(CheckboxesGUI)

问题描述

我在上 Java 编程课,我跟着我的教授的视频,他在 Eclipse 中编写程序。我有这个错误,但他没有在他的视频中,在他的代码编译的视频中。

import javax.swing.JFrame;

public class CheckboxesTester {

    /**
     * @param args
     */
    public static void main(String[] args) {
            // instantiate a frame
            // from the class JFrame
        JFrame frame = new JFrame("Fun with check boxes");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        
            // the primary panel is added
            // to the frame and made visible
        frame.getContentPane().add(new CheckboxesGUI());
        frame.pack();
        frame.setVisible(true);
        
    }   // end method main

}   // end class CheckboxesTester

这使用以下内容:

import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import javax.swing.*;

public class CheckboxesGUI extends JPanel 
{
    
        // declare variables/controls to
        // be used in program
    private JLabel lblName, lblMajor, lblGradeLevel;
    private JLabel lblOutput;
    private JTextField txtName, txtMajor, txtGradeLevel;
    private JCheckBox cbxName, cbxMajor, cbxGradeLevel;
    private JButton btnDone, btnClear; 
    private String output;
    private Boolean gotName, gotMajor, gotGradeLevel;
    
    public CheckboxesGUI()
    {
            // define listeners
        StyleListener personalInfo = new StyleListener();
        ButtonListener buttonWork = new ButtonListener();
        ClearListener buttonClear = new ClearListener();
        
            // initialize variables
        gotName = false;
        gotMajor = false;
        gotGradeLevel = false;
        output = "";
        
            // create a label that will
            // be used for display
        lblOutput = new JLabel("-------------");
        
            // create labels and text fields
            // for name, major and grade
        lblName = new JLabel("What is your name?");
        txtName = new JTextField(12);
        
        lblMajor = new JLabel("What is your Major?");
        txtName = new JTextField(12);
        
        lblGradeLevel = new JLabel("What is your grade level?");
        txtGradeLevel = new JTextField(12);
        
            // create check boxes for name,
            // major, and grade
        cbxName = new JCheckBox("Name");
        cbxMajor = new JCheckBox("Major");
        cbxGradeLevel = new JCheckBox("Grade Level");
        
            // create button for ending input
        btnDone = new JButton("Done");

        
            // create a button for clearing
        btnClear = new JButton("Clear");
        
            // associate listeners with 
            // appropriate controls
        cbxName.addItemListener(personalInfo);
        cbxMajor.addItemListener(personalInfo);
        cbxGradeLevel.addItemListener(personalInfo);
        btnDone.addActionListener(buttonWork);
        btnClear.addActionListener(buttonClear);

            // add all controls to panel
        add(lblName);
        add(txtName);
        add(lblMajor);
        add(txtMajor);
        add(lblGradeLevel);
        add(txtGradeLevel);
        add(cbxName);
        add(cbxMajor);
        add(cbxGradeLevel);
        add(btnDone);
        add(btnClear);
        add(lblOutput);
        
            // set up size and control of panel
        setPreferredSize (new Dimension(350, 150));
        setBackground (Color.WHITE);
        
    }   // end constructor CheckBoxesGUI
    
    private class StyleListener implements ItemListener
    {
        //why StyleListener is this related to aesthetic properties?
    
        public void itemStateChanged (ItemEvent event)
        {
            //for debug
                // name was selected
            if (cbxName.isSelected())
            {
                    // don't duplicate name info
                    // in building of string
                if (gotName == false)
                {
                    System.out.println("Name: " + 
                            txtName.getText()); 
                    output = output + " " + txtName.getText();
                    System.out.println("output: " + output);
                    gotName = true;
                }
            }   // end outer if
            
            
                // major was selected
            if (cbxMajor.isSelected())
            {
                    // don't duplicate major info
                    // in building of string
                if (gotMajor == false)
                {
                    System.out.println("Major: " + 
                            txtMajor.getText());    
                    output = output + " " + txtMajor.getText();
                    System.out.println("output: " + output);
                    gotMajor = true;
                }
                
            }   // end outer if
            
            
                // grade was selected
            if (cbxGradeLevel.isSelected())
            {
                    // don't duplicate grade info
                    // in building of string
                if (gotGradeLevel == false)
                {
                    System.out.println("Grade Level: " + 
                            txtGradeLevel.getText());   
                    output = output + " " + txtGradeLevel.getText();
                    System.out.println("output: " + output);
                    gotGradeLevel = true;
                }
                
            }   // end outer if
            
        }   // end method itemStateChanged
    }   // end class StyleListener
    
       private class ButtonListener implements ActionListener
       {
          public void actionPerformed (ActionEvent event)
          {
                // display this label!
              lblOutput.setText(output);
          }
       }    // end class ButtonListener
       
       private class ClearListener implements ActionListener
       {
          public void actionPerformed (ActionEvent event)
          {
                // clear everything!
              output = "";
              txtName.setText("");
              txtMajor.setText("");
              txtGradeLevel.setText("");
              cbxName.setSelected(false);
              cbxMajor.setSelected(false);
              cbxGradeLevel.setSelected(false);
              gotName = false;
              gotMajor = false;
              gotGradeLevel = false;
              lblOutput.setText("-------------");
              
          }
       }    // end class ClearListener
    
    }   // end class CheckboxesGUI

我有一个错误说:容器类型中的方法 add(Component) 不适用于参数(CheckboxesGUI)

我不确定我到底错过了什么,我可能遗漏了一些明显的东西,但我看不出我的代码与我的教授在他的视频中写的有什么不同。我知道他在 2014 年制作了这个视频,这是我第一次使用 eclipse,距离我上一堂 Java 课已经十多年了……甚至比他的视频还要早。如果至少不知道为什么,我宁愿不上交这个。我查看了 java 文档,但即使我基本上了解容器、组件、侦听器、jframe 和 jpanel 等内容,我还是遗漏了一些东西。

标签: javaswingcompiler-errorscomponentsjframe

解决方案


我发现了问题:

txtName = new JTextField(12);

我做了两次(在第 41 和 44 行)

我应该输入:

txtMajor = new JTextField(12); // for line 44

这是不严格的复制粘贴错误,缺乏经验。


推荐阅读