我正在尝试将一些组件动态添加到 JPanel,但不幸的是它们没有出现。我只看到构造函数中添加的那些。
更新版本(添加一个新的 JPanel,所有组件都将在其中):
public class View extends JPanel {
JPanel panel = new JPanel();
JLabel label;
JLabel labels[];
JButton b1 = new JButton("OK");
public View() {
this.setLayout(new FlowLayout());
this.add(panel); // adding a new JPanel
label = new JLabel("My label");
panel.add(label); // adding label to the new panel (this one works)
}
public void showLabels() {
System.out.println("function showLabels called");
labels = new JLabel[5];
for (int i = 0; i < 5; i++) {
labels[i] = new JLabel("Label: " + i);
panel.add(labels[i]); // this one doesn't work
}
panel.add(b1); // this one doesn't work, too
this.validate(); // validating this class (parent container)
panel.validate(); // validating the panel, where all the components are
}
}
不幸的是什么都没有改变。
最佳答案
调用validate()
在父容器上,如 Nested Layout Example 所示.左下方的那些标签是动态添加的。请注意,调用 pack()
可能会导致 GUI 的大小发生变化,而调用 validate()
则不会。如果您需要调整 GUI 的大小 - 调用 pack()
,否则调用 validate()
。
关于java - 动态添加组件到 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10093350/