NetBeans表单设计器:调用initComponents后更改布局

时间:2010-02-02 09:42:08

标签: java netbeans layout designer jpanel

我有一个扩展javax.swing.JPanel的类,它包含一个JButton。我在 NetBeans设计器中创建了该类。因此,我有一个initComponents()函数,它从类构造函数调用。

我想要做的是当/如果调用一个函数,我想添加第二个按钮,并更改两个按钮的布局。简单地说:

public void addSecond() {
    javax.swing.JButton secondButton = new javax.swing.JButton();
    add(secondButton , java.awt.BorderLayout.CENTER);
}

不起作用,新按钮不显示。我也尝试了invalidate(),但没有运气。

  • 如何触发重新评估布局?
  • 如果多次调用所述函数,我需要调用dispose()的布局/按钮的哪些部分?我应该担心任何其他清理工作?
  • 如果我不使用NetBeans设计器,这会更容易处理吗?

2 个答案:

答案 0 :(得分:1)

当您以改变布局的方式更改组件时,您需要通过调用revalidate()再次触发布局管理器。你可以随意调用它。
对于简单的布局,只需调用repaint()即可。

实际上,除非你动态更改面板(即动态添加/删除组件),否则你应该使用netbeans设计器,所以所有的Swing元素都在一个地方。

- 编辑 -
而且每个面板只能将一个组件放入BorderLayout.CENTER。如果将多个元素放入面板的相同位置,则绘制的内容没有明确定义,即它可能是元素中的任何一个(或两者)。

答案 1 :(得分:1)

在使用BorderLayout.CENTER添加按钮之前,您需要设置面板​​的布局。此外,您必须再次删除并添加第一个按钮,并在面板上调用revalidate()方法。

如下所示更改addSecond()方法,它应该可以正常工作。

private void addSecond() {
    JButton secondButton = new JButton("Button - 2");

    this.setLayout(new BorderLayout());
    remove(firstButton);
    add(firstButton, BorderLayout.NORTH);
    add(secondButton, BorderLayout.CENTER);

    revalidate();
}