我有一个扩展javax.swing.JPanel
的类,它包含一个JButton。我在 NetBeans设计器中创建了该类。因此,我有一个initComponents()
函数,它从类构造函数调用。
我想要做的是当/如果调用一个函数,我想添加第二个按钮,并更改两个按钮的布局。简单地说:
public void addSecond() {
javax.swing.JButton secondButton = new javax.swing.JButton();
add(secondButton , java.awt.BorderLayout.CENTER);
}
不起作用,新按钮不显示。我也尝试了invalidate()
,但没有运气。
答案 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();
}