这是我的第一个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);
}
答案 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);