无法垂直添加按钮

svdrlsy4  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(409)

我正在编写一个程序,其中jbuttons以垂直方式动态添加到jpanel(这些按钮存储在一个arraylist中)通过将jpanel设置为gridbaglayout,我尝试了以下代码。

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

结果如下

加上按钮之后

我还尝试将jpanel设置为gridlayout

leftButtonPanel.setLayout(new GridLayout(listOfButtons.size(),1));
for(int i = 0; i<listOfButtons.size();i++) {
            leftButtonPanel.add(listOfButtons.get(i));
}



按钮“全部查看”和“添加”都在同一个按钮列表列表中。把按钮添加到面板的唯一方法就是通过forloop。由于某些原因,按钮仍然水平启动。

vfh0ocws

vfh0ocws1#

为了 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 相反

相关问题