0

我使用 DesignGridLayout java 库(这里)创建网格布局。如果创建 3 列布局,则在示例中。
使用此代码:

layout.row().add(new JButton("Button 1")).add(new JButton("Button 2")).add(new JButton("Button 3"));

或使用返回对象的方法:

layout.row().add(button()).add(button()).add(button());
...
...
public JButton button() {
    return new JButton("Button");
}

问题是,如何动态创建 JButton 值?可能是名称、图标或任何东西?
我已经尝试过我自己的代码:

for (int i=0; i<4; i++) {
        JButton button = new JButton();
    layout.row().add(button).add(button).add(button);   
}

它返回: 线程“AWT-EventQueue-0”中的异常 java.lang.IllegalArgumentException:不要两次添加相同的组件

我在面板中添加的每个组件中使用不同值的目的是,我想创建填充不同图像的画廊,并使用循环加载这些图像,如下所示:

for(int i=0; i<files.length; i++) {
    ...
    ImageIcon imgSource = new ImageIcon(new File(myPath));
    JLabel labelGallery = new JLabel(imgSource);
    ...
}

有什么解决办法吗?谢谢之前:)

4

2 回答 2

2

在你的例子中,

layout.row().add(button).add(button).add(button);

具有尝试重复将相同实例添加到行的效果。 JButton

引用的示例中

layout.row().grid().add(button()).add(button());

button()每次出现时调用一个辅助方法 ,来创建一个新实例:

public static JButton button() {
    return new JButton("Button");
}
于 2013-03-23T15:06:49.353 回答
0

正如@trashgod 所提到的,Swing 不允许向面板添加两次相同的组件。如果要将在循环中创建的多个组件添加到同一行,可以按如下方式进行:

IRow row = layout.row().grid();
for (int i = 0; i < n; i++) {
    JButton button = createButton(i);
    row.add(button);
}

这将只创建一行带有n按钮的行。

于 2013-05-18T06:23:19.027 回答