如何在没有布局的情况下将按钮添加到新行?

时间:2014-08-16 19:35:32

标签: java user-interface

这是我的第一个gui项目,如果它是一个愚蠢的问题,请原谅我。 我应该在5行中向面板添加25个按钮,每行5个按钮。它必须像5X5矩阵。但我不能在这个项目中使用布局。所以我必须在没有布局的情况下这样做。

以下是添加按钮的代码:

for(int i=0;i<25;i++)
        {   
        b=new JButton();
        b.setLocation(0, 0);
        b.setPreferredSize(new Dimension(40, 40));
        b.setEnabled(true);
        panel.add(b);
        }

2 个答案:

答案 0 :(得分:1)

  

编辑:已更新至工作MCVE

最简单的方法是使用两个嵌套的for循环分别处理行和列。这是在下面的示例中的方法addButtonsA中完成的。

或者,您可以从循环变量(从0到25运行)计算当前行和列,就像在addButtonsB方法中一样。

请注意,在任何情况下,当您使用布局管理器时,您必须通过调用setSize来指定按钮的大小。 (通常,当您使用布局管理器时,必须使用setPreferredSize,但不是在这种情况下)。

示例:

import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ManualButtonGrid
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        panel.setLayout(null);

        int numRows = 5;
        int numCols = 5;

        //addButtonsA(panel, numRows, numCols);
        addButtonsB(panel, numRows, numCols);

        f.getContentPane().add(panel);
        f.setSize(500,500);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    private static void addButtonsA(JPanel panel, int numRows, int numCols)
    {
        int size = 60;
        for (int r = 0; r < numRows; r++)
        {
            for (int c = 0; c < numCols; c++)
            {
                JButton b = new JButton(String.valueOf(r*numCols+c));
                b.setLocation(c*size, r*size);
                b.setSize(new Dimension(size, size));
                panel.add(b);
            }
        }
    }

    private static void addButtonsB(JPanel panel, int numRows, int numCols)
    {
        int size = 60;
        for (int i = 0; i < 25; i++)
        {
            JButton b = new JButton(String.valueOf(i));
            int r = i / numCols;
            int c = i % numCols;
            b.setLocation(c*size, r*size);
            b.setSize(new Dimension(size, size));
            panel.add(b);
        }
    }

}

答案 1 :(得分:1)

这是一个可以帮助您的代码。

panel.setLayout(null);
Dimension size = new Dimenstion(40, 40);
for(int i=0;i<5;i++){
    for(int j=0; j<5; j++){   
        b=new JButton();
        b.setBounds(size.width * i, size.height *j, size.width, size.height);
        b.setEnabled(true);
        panel.add(b);
    }
}
panel.setVisible(true);