在Java中以编程方式将控件添加到窗体

在Java中以编程方式将控件添加到窗体,java,forms,swing,netbeans,controls,Java,Forms,Swing,Netbeans,Controls,我试图通过代码向表单添加一个简单的控件。我已经 public main(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); this.setLayout(new java.awt.BorderLayout()); JPanel pnl = new JPanel(); pnl.setLayout(new BorderLayout()); pn

我试图通过代码向表单添加一个简单的控件。我已经

public main(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    this.setLayout(new java.awt.BorderLayout());

    JPanel pnl = new JPanel();
    pnl.setLayout(new BorderLayout());
    pnl.setBackground(Color.red);
    pnl.setSize(500, 500);
    add(pnl, BorderLayout.CENTER);
    pnl.setVisible(true);
}

当我运行应用程序时,我看不到我创建的面板。有人能告诉我我做错了什么吗?

您没有提到当前容器使用的布局,但很可能是GroupLayout,一种与NetBeans GUI builder关联的布局,它不遵守BorderLayout约束/常量。您需要重新考虑整个GUI的布局,特别是当您要将IDE GUI生成器布局与手动编码的布局混合使用时。这种混合是可以做到的,但需要小心——创建GUI生成器JPanel,创建自己手工构建的JPanel,然后将它们组合到使用适当布局的主JPanel中。具体细节将取决于你想要创造什么,这是我们目前不知道的

也许这让你感到困惑:

JPanel pnl = new JPanel();
pnl.setLayout(new BorderLayout()); // (A)
// ....
add(pnl, BorderLayout.CENTER);  // (B)
行(A)将pnl的布局设置为BorderLayout
第(B)行将pnl添加到当前容器的BorderLayout.CENTER位置,这也是一个可能不使用BorderLayout的位置(这是一个猜测,因为您从未显示或告诉我们)

另外,在将所有组件添加到顶层窗口之后以及在显示它之前,是否调用
pack()
?你应该

还请注意,由于JPanel在默认情况下是可见的,因此不需要这样做:

pnl.setVisible(true);

你好?为什么你问了一个问题却忽略了别人的帮助?