【问题标题】:Dynamically adding components to JPanel将组件动态添加到 JPanel
【发布时间】:2012-04-10 17:18:34
【问题描述】:

我正在尝试将一些组件动态添加到 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
  }
}

不幸的是,没有任何改变。

【问题讨论】:

  • 您是否尝试在父 JFrame 上调用 pack()
  • 还没有。仅调用 revalidate() 或其他方法还不够吗?
  • JPanel 的布局是什么?某些组件可以在某些布局中重叠,例如 BorderLayou。试试 BoxLayout 或 FlowLayout。
  • 我默认使用FlowLayout。

标签: java swing jpanel


【解决方案1】:

在父容器上调用validate(),如Nested Layout Example所示。左下角的那些标签是动态添加的。请注意,调用pack() 可能会导致GUI 的大小发生变化,而调用validate() 则不会。如果您需要让 GUI 调整大小 - 请致电 pack(),否则请致电 validate()

【讨论】:

  • 即使我首先将所有组件放在单独的 JPanel 上,然后将新的 JPanel 放在第一个(父)JPanel View 上并重新验证并重新绘制两者,也没有任何变化......跨度>
  • "revalidate and repaint" ..请注意,我提到了这些方法中的 noither(有充分的理由)。也许你在想mre的回答(现在已经被删除了)。
  • 好的,到目前为止我已经更新了我的代码。现在我只使用validate(),但没有任何改变。
  • "my code so far"(叹气)请理解几件事。 1) 上面的“SSCCE”一词是一个链接。 2)当我发布链接时,我希望您关注它,阅读它,并询问您是否有任何问题。 3)发布该链接(除其他外)暗示我不会费心查看代码的模糊描述或代码sn-ps。 4) 更新包含 SSCCE。 -- 回到你身边。
  • “我的代码很短,” 是的。目前很好。 "..self contains,"* 直接引用代码..可以'复制、粘贴、编译、运行'前两个就可以了。在添加导入之前,代码不会编译(为了使其更短,我经常妥协并进行“打包”导入而不是单独的类导入)。代码不会运行,因为它没有创建 GUI、将其添加到顶级容器并将容器设置为可见的 main()“但我认为,我遵守规则” SSCCE 是建议,而不是规则。此后某事要么是“SSCCE”,要么是“不是 SSCCE”
猜你喜欢
  • 2018-09-19
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多