3

嗨,我是 java swing 新手。我必须动态添加按钮,当我尝试动态添加这些按钮时,当它处于自由布局时它不会添加到面板中。它接受任何一种布局,如 null 布局或 gridbaglayout。

有没有其他方法可以使用自由布局动态添加组件?

4

1 回答 1

4

我假设对于“自由布局”,您指的是自由设计布局,也称为由 Netbeans 开发的 GroupLayout。这种布局背后的基本思想是它在交互式设计和使用 GUI 构建器添加具有简单视觉支持的组件时提供的便利。

GUI 构建器生成支持正确放置组件的必要代码。这是自动生成的代码,用于在具有自由设计布局的 JPanel 上放置两个 JButton:

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jButton1)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 217, Short.MAX_VALUE)
                .addComponent(jButton2)
                .addGap(96, 96, 96))))
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addComponent(jButton1)
        .addGap(100, 100, 100)
        .addComponent(jButton2)
        .addContainerGap(140, Short.MAX_VALUE))
);

如您所见,轻松交互放置的成本已传递到生成的代码中。这使得这种布局并不真正适合动态组件处理。

另一方面,FlowLayout 或 GridLayout 允许您以编程方式更好地处理动态组件。您还可以始终将 FlowLayout JPanel 添加到 GroupLayout JPanel,以便充分利用这两种布局。

于 2012-05-04T08:26:19.570 回答