以编程方式添加控件以在Java中形成

时间:2018-05-20 18:43:44

标签: 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());
    pnl.setBackground(Color.red);
    pnl.setSize(500, 500);
    add(pnl, BorderLayout.CENTER);
    pnl.setVisible(true);
}

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

1 个答案:

答案 0 :(得分:0)

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

也许这会让你感到困惑:

JPanel pnl = new JPanel();
pnl.setLayout(new BorderLayout()); // (A)
// ....
add(pnl, BorderLayout.CENTER);  // (B)

行(A)将pnl的布局设置为BorderLayout
行(B)将pnl添加到 当前 容器的BorderLayout.CENTER位置,再次可能不使用BorderLayout(a)因为你从未表现出或告诉我们,所以猜测。

另外,在将所有组件添加到顶级窗口之后和显示之前,是否会调用pack()?你应该。

另请注意,由于JPanel默认可见,因此根本不需要这样做:

pnl.setVisible(true);