Java Can';t将任何组件添加到JFrame-IllegalArgumentException

Java Can';t将任何组件添加到JFrame-IllegalArgumentException,java,swing,jframe,Java,Swing,Jframe,当我试图在构造函数中向JFrame添加任何内容时,我遇到了IllegalArgumentException 类似的代码在文档中工作: 为什么我的简单代码不起作用?它是在Netbeans 10中创建的 编辑: 我还尝试添加带有位置和边缘的标签,但没有帮助。我用setBounds方法修改了代码 首先,JavaTestApp.java中的主类: package javatestapp; public class JavaTestApp { public static void main(S

当我试图在构造函数中向JFrame添加任何内容时,我遇到了IllegalArgumentException

类似的代码在文档中工作:

为什么我的简单代码不起作用?它是在Netbeans 10中创建的

编辑: 我还尝试添加带有位置和边缘的标签,但没有帮助。我用setBounds方法修改了代码

首先,JavaTestApp.java中的主类:

package javatestapp;

public class JavaTestApp {
    public static void main(String[] args) {
        TestForm mainFrame = new TestForm();

        mainFrame.setLocation(300, 150);
        mainFrame.setVisible(true);

        mainFrame.toFront();
        mainFrame.repaint();
    }

}
第二个文件是:

package javatestapp;

import javax.swing.JLabel;

public class TestForm extends javax.swing.JFrame {

    /**
     * Creates new form TestForm
     */
    public TestForm() {
        initComponents();

        JLabel label = new JLabel("Test label");
        label.setBounds(10,10,100,25);        

        getContentPane().add(label);
    }

    // GENERATED CODE BELOW
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        pack();
    }// </editor-fold>                        

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TestForm().setVisible(true);
            }
        });
    }
包javatestapp;
导入javax.swing.JLabel;
公共类TestForm扩展了javax.swing.JFrame{
/**
*创建新表单TestForm
*/
公共测试表单(){
初始化组件();
JLabel标签=新的JLabel(“测试标签”);
标签.立根(10,10100,25);
getContentPane().add(标签);
}
//下面生成的代码
@抑制警告(“未选中”)
//                           
私有组件(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
包装();
}//                         
公共静态void main(字符串参数[]){
试一试{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
}捕获(ClassNotFoundException ex){
getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(实例化异常){
getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}捕获(非法访问例外){
getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(javax.swing.UnsupportedLookAndFeelException ex){
getLogger(TestForm.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}
//
/*创建并显示表单*/
invokeLater(new Runnable()){
公开募捐{
新建TestForm().setVisible(true);
}
});
}
Stacktrace,关于@VGR请求:

Exception in thread "main" java.lang.IllegalArgumentException
    at org.netbeans.lib.awtextra.AbsoluteLayout.addLayoutComponent(Unknown Source) 
    at java.awt.Container.addImpl(Container.java:1120)
    at java.awt.Container.add(Container.java:410)
    at javatestapp.TestForm.<init>(TestForm.java:16)
    at javatestapp.JavaTestApp.main(JavaTestApp.java:5) 
BUILD STOPPED (total time: 9 seconds)
线程“main”java.lang.IllegalArgumentException中的异常 位于org.netbeans.lib.awtextra.AbsoluteLayout.addLayoutComponent(未知源) 位于java.awt.Container.addImpl(Container.java:1120) 在java.awt.Container.add处(Container.java:410) 在javatestapp.TestForm.(TestForm.java:16) 位于javatestapp.javatestapp.main(javatestapp.java:5) 构建已停止(总时间:9秒) 链接到weetransfer上上载的项目:

我还选择了绝对布局

这就是你的问题。你没有正确地使用它

    getContentPane().add(label);
如果不指定适当的约束,就不能将标签添加到框架中。我从未使用过AbsoluteLayout(因为我相信适当的布局管理),但我想您需要指定x、y、宽度和高度等约束


布局管理器无法猜出您要将组件放置在何处,因此您需要指定所有信息。这就是为什么您应该使用布局管理器。然后布局管理器将根据布局管理器的规则放置组件。只要您稍微练习一下,就会容易得多。

我觉得我需要任何关于布局管理器的好建议h为我提供了学习Java SE和Swing的正确方法。我已经阅读了许多教程和主题。添加新组件是上面链接的文档中常见的事情。它必须简单。因此我必须不理解某些东西。如果您能向我推荐可能比Oracle文档更好的课程,以及本论坛和许多视频中的主题,我将非常高兴Youtube上的eos?大多数具有类似IllegalArgumentException的人在尝试时都会遇到问题:-将JFrame添加到JFrame或JPanel,-将未初始化的变量添加到JFrame窗格,-使用的布局如Flow需要更多参数(aligment或类似的东西,即FLowLayout.CENTER),-我相信会有更多的案例。我在谷歌上读了很多主题,花了我好几天的时间。没有任何帮助。好吧,第一个建议是停止使用GUI生成器,“手工”编写代码,
Absolute Layout
null Layout
相同,并且会导致将来在另一台具有不同OS/PLAF/屏幕大小或分辨率的计算机上进行测试时出现类似问题。第二个建议是发布堆栈跟踪。第三个建议是不要扩展
JFrame
,您不会更改其行为,所以只需创建一个i事实证明。布局管理是一个复杂的主题,但经过一些时间和实践,你可以做一些出色的事情。例如,编辑你的问题,并包括你遇到的异常的完整堆栈跟踪。它将告诉我们和你,哪里出了问题,哪里出了问题。这个回答只得到了部分回答。事实是——不要使用绝对布局不正确-给出坐标和尺寸并没有帮助。一般结论是总的绝对布局弱点,迫使布局改变为其他布局。