【问题标题】:unable to add buttons vertically无法垂直添加按钮
【发布时间】:2020-12-24 05:39:38
【问题描述】:

我正在编写一个程序,其中 JButton 以垂直方式动态添加到 JPanel。 (按钮存储在数组列表中)我通过将 JPanel 设置为 gridbaglayout 尝试了以下代码。

        for(int i = 0; i<listOfButtons.size();i++) {
            c.gridx=0;
            c.gridy=i;
            leftButtonPanel.add(listOfButtons.get(i));
        }

结果如下

添加按钮后

我也尝试将 JPanel 设置为网格布局

leftButtonPanel.setLayout(new GridLayout(listOfButtons.size(),1));

for(int i = 0; i<listOfButtons.size();i++) {
            leftButtonPanel.add(listOfButtons.get(i));
}

“查看全部”和“添加”按钮都在同一个 listOfButtons 数组列表中。将按钮添加到面板中的唯一方法是通过该 forloop。由于某些原因,按钮仍然是水平开始的。

【问题讨论】:

  • 使用GridBagLayout时,必须在panel.add方法中指定GridBagConstraints实例作为第二个参数。
  • 天哪,这就是我所缺少的,非常感谢
  • 您可以只使用沿 Y 轴的框布局来实现此目的。将不需要约束,然后导致网格包看起来有点矫枉过正

标签: java swing layout-manager grid-layout gridbaglayout


【解决方案1】:

对于GridBagLayout,别忘了,您还需要提供GridBagConstraints,否则它的行为很像FlowLayout

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class SoTest {

    public static void main(String[] args) {
        new SoTest();
    }

    public SoTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            List<JButton> listOfButtons = new ArrayList<>(5);
            for (int i = 0; i < 10; i++) {
                listOfButtons.add(new JButton(Integer.toString(i)));
            }

            for (int i = 0; i < listOfButtons.size(); i++) {
                add(listOfButtons.get(i), gbc);
            }
        }

    }
}

此时,我很好奇您是否应该考虑改用JList

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2015-01-21
    • 1970-01-01
    • 2019-02-25
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多