【发布时间】:2011-09-17 10:17:12
【问题描述】:
我正在尝试动态生成一个表单。基本上,我想加载要购买的项目列表,并为每个项目生成一个按钮。我可以确认这些按钮是使用调试器生成的,但它们没有显示出来。这是在JPanel 的子类中:
private void generate() {
JButton b = new JButton("height test");
int btnHeight = b.getPreferredSize().height;
int pnlHeight = this.getPreferredSize().height;
int numButtons = pnlHeight / btnHeight;
setLayout(new GridLayout(numButtons, 1));
Iterator<Drink> it = DrinkMenu.iterator();
for (int i = 0; i <= numButtons; ++i) {
if (!it.hasNext()) {
break;
}
final Drink dr = it.next();
b = new DrinkButton(dr);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
order.addDrink(dr);
}});
add(b);
}
revalidate();
}
DrinkButton 是JButton 的子类。有什么想法吗?
【问题讨论】:
-
你为什么将 b 设置为 JButton 然后再降低设置为 DrinkButton
-
确保这些修改发生在事件调度线程中
-
基本代码看起来不错。您正在使用 revalidate() 这是一个关键。但我们不知道如何使用此代码的上下文。如果此面板实际上已添加到框架中,我们不会这样做。发布您的 SSCCE (sscce.org) 来证明问题。
标签: java swing user-interface dynamic