java - 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 等内容,我还是遗漏了一些东西。
解决方案
我发现了问题:
txtName = new JTextField(12);
我做了两次(在第 41 和 44 行)
我应该输入:
txtMajor = new JTextField(12); // for line 44
这是不严格的复制粘贴错误,缺乏经验。
推荐阅读
- python - 烧瓶解码数据
- android - 如何使 sqlite 数据库中的 url 适应 imageview
- javascript - 防止用户在 HTML 中看到视频 URL?
- vb.net - Applycurrent values 仅显示第一个值
- php - 多维数组值中的 JSON 对象值(Google GEO 数据)
- ansible - 如何在 Ansible 中执行交替角色?
- svg - createjs中形状的SVG路径
- node.js - NestJS cookie-parser 在 e2e 测试期间不是函数错误
- sql - 需要将查询从 Oracle 转换为 SQL Server,并且需要转换 ListAgg
- java - 在 python 子进程中发送一个字符串作为参数