Java 方法add(Component)不适用于参数

Java 方法add(Component)不适用于参数,java,swing,Java,Swing,我试图添加一个面板到我的框架,但它一直给我一个错误,我似乎不明白 此行有多个标记 -调试当前指令指针 -类型容器中的add(Component)方法为 不适用于参数(TestPanel) import javax.swing.*; 公共类FrameTest3{ 公共静态void main(字符串[]args){ TestPanel samplePanel=新建TestPanel(); JFrame sampleFrame=新JFrame(); sampleFrame.getContentPan

我试图添加一个面板到我的框架,但它一直给我一个错误,我似乎不明白

此行有多个标记
-调试当前指令指针
-类型容器中的add(Component)方法为
不适用于参数(TestPanel)
import javax.swing.*;
公共类FrameTest3{
公共静态void main(字符串[]args){
TestPanel samplePanel=新建TestPanel();
JFrame sampleFrame=新JFrame();
sampleFrame.getContentPane().add(samplePanel);
样本框架设置尺寸(300200);
sampleFrame.setVisible(真);
系统输出打印项次(“完成”);
} 
}


这个完整的工作示例基于您的代码,表明问题出在您的构建环境中。另外,

  • JFrame::add()
    隐式转发到竞争窗格

  • 仅在上构造和操作Swing GUI对象

  • 当您真正想覆盖时,不要使用
    setSize()

  • 调用
    super.paintComponent()
    以避免

  • 为了便于测试,
    私有静态
    类在语义上等同于类


你的代码似乎对我有用。这两个类是否在各自的文件中?在同一个包裹里?你能用你的问题发布完整的错误信息吗?对我来说也很好。请提供有关错误的详细信息。@HoverCraftFullOfels这是同一个包(默认包)中的两个类这是完整的错误消息“此行有多个标记-调试当前指令指针-类型容器中的方法add(Component)不适用于参数(TestPanel)”确定,您是否在附近有自己命名为
JPanel
的类?然后重新开始,重新编译,重新运行。
import java.awt.*;
import javax.swing.*;

public class TestPanel extends JPanel {

    public void paintComponent(Graphics g) {   
        g.setColor(Color.red);
        g.drawString("hello", 30, 80);
    } 
}
import java.awt.*;
import javax.swing.*;

public class FrameTest3 {

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            TestPanel samplePanel = new TestPanel();
            JFrame sampleFrame = new JFrame();
            sampleFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            sampleFrame.add(samplePanel);
            sampleFrame.pack();
            sampleFrame.setVisible(true);
            System.out.println("Done");
        });
    }

    private static class TestPanel extends JPanel {

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.red);
            g.drawString("hello", 30, 80);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(300, 200);
        }
    }
}