Java 无法垂直添加按钮

Java 无法垂直添加按钮,java,swing,layout-manager,grid-layout,gridbaglayout,Java,Swing,Layout Manager,Grid Layout,Gridbaglayout,我正在编写一个程序,其中JButton以垂直方式动态添加到JPanel。(按钮存储在arraylist中)通过将JPanel设置为gridbaglayout,我尝试了以下代码 for(int i = 0; i<listOfButtons.size();i++) { c.gridx=0; c.gridy=i; leftButtonPanel.add(listOfButtons.get(i));

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

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

对于(int i=0;i对于
GridBagLayout
,不要忘了,您还需要提供
GridBagConstraints
,否则它的行为很像
FlowLayout

导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类SoTest{
公共静态void main(字符串[]args){
新SoTest();
}
公共软件测试(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame();
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
gbc.fill=GridBagConstraints.HORIZONTAL;
按钮列表=新的ArrayList(5);
对于(int i=0;i<10;i++){
add(newjbutton(Integer.toString(i));
}
对于(int i=0;i

在这一点上,我很好奇你是否应该在使用GridBagLayout时考虑使用
JList

,你必须将GridBagConstraints实例指定为面板中的第二个参数。add method.OMG是的,这就是我所缺少的,谢谢你,所以你可以使用沿Y轴的长方体布局那个么就不需要约束了,因为网格包看起来太过分了
leftButtonPanel.setLayout(new GridLayout(listOfButtons.size(),1));

for(int i = 0; i<listOfButtons.size();i++) {
            leftButtonPanel.add(listOfButtons.get(i));
}
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);
            }
        }

    }
}