将JButton添加到JPanel

3
我想使用一个For循环将多个JButtons添加到JPanel中。当用户按下按钮时,会运行以下代码:
for (i = 0; i < 10; i++)
{
  JButton aButton = new JButton();
  mainPanel.add(aButton);
  mainPanel.revalidate();
  mainPanel.repaint();
  System.out.println("Added: " + (i + 1) + "buttons");
}

然而,当我按下按钮时,并没有向JPanel添加任何JButton,但程序打印出了应该添加的适当数量的按钮。
不确定问题出在哪里 =/

1
你使用了什么布局管理器? - aioobe
尝试使用invalidate而不是revalidaterepaint - 你不能在循环结束时这样做吗? - sje397
每次添加按钮时,您不应该验证和重绘面板,而是在添加完所有按钮后再进行。验证和绘制GUI窗口通常是昂贵的。 - Jean Hominal
2个回答

2

我已经解决了我的问题。我使用的是NetBeans,显然自由布局不起作用,所以我将JPanel的布局设置为网格布局,按钮就出现了。


2
你仍然不想在for循环内调用repaint方法。没有理由重复绘制面板十次。 - Matti Lyra
谢谢。将在循环外重绘。 - Flynn

1
我会使用以下内容。
for (i = 0; i < 10; i++) {
    mainPanel.add(new JButton("Button text"));
    System.out.println("Added: " + (i + 1) + "buttons");
}

mainPanel.invalidate();
mainPanel.repaint();

如果您需要无效化和重绘,那么您很可能做错了什么? - willcodejavaforfood
你所需要的就是revalidate()。这将会调用布局管理器。 - camickr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接