二维数组初始化的区别
Difference between initialization of array with two dimensions
在我的 JPanel 中,我使用 tablelayout.jar Oracle 库(看看 here),因此,通常,我必须执行以下操作:
private double[][] size = {
{30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30},
{30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30}
};
JPanel p = new JPanel();
p.setLayout(new TableLayout(size));
其中“30”分别是 cos 和行的维度。在这种情况下,我们需要方形单元格。所以我可以这样做,例如:
p.add(new JButton(), "1,4" /*"col,row"*/);
我们认为这样声明 "size" 矩阵并不好,因此我们更改了如下初始化:
size = new double[Constants.GUI_ROWS][Constants.GUI_COLS];
for (int i=0; i<Constants.GUI_COLS-1; i++)
for (int j=0; j<Constants.GUI_ROWS-1; j++)
size[i][j] = 30;
其中
Constants.GUI_COLS = 19 ({30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30})
和
Constants.GUI_ROWS = 17 ({30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30})
但这不起作用。当我们尝试向 JPanel 添加内容时,什么也没有显示。仅当我们手动编写第一个初始化时它才有效。这是为什么?
您将循环条件关闭了一个。应该是:
for (int i=0; i<Constants.GUI_COLS; i++)
for (int j=0; j<Constants.GUI_ROWS; j++)
size[i][j] = 30;
注意如果这个调用
p.setLayout(new TableLayout(size));
在此调用之前出现:
size = new double[Constants.GUI_ROWS][Constants.GUI_COLS];
size
引用的旧数组将由 TableLayout
使用。
要达到您手动完成的效果,您可以使用
double size[][];
size = new double[2][];
size[0]=new double[19];
size[1]=new double[17];
for (int i=0; i<19; i++)
size[0][i] = 30;
for (int i=0; i<17; i++)
size[1][i] = 30;
在我的 JPanel 中,我使用 tablelayout.jar Oracle 库(看看 here),因此,通常,我必须执行以下操作:
private double[][] size = {
{30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30},
{30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30}
};
JPanel p = new JPanel();
p.setLayout(new TableLayout(size));
其中“30”分别是 cos 和行的维度。在这种情况下,我们需要方形单元格。所以我可以这样做,例如:
p.add(new JButton(), "1,4" /*"col,row"*/);
我们认为这样声明 "size" 矩阵并不好,因此我们更改了如下初始化:
size = new double[Constants.GUI_ROWS][Constants.GUI_COLS];
for (int i=0; i<Constants.GUI_COLS-1; i++)
for (int j=0; j<Constants.GUI_ROWS-1; j++)
size[i][j] = 30;
其中
Constants.GUI_COLS = 19 ({30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30})
和
Constants.GUI_ROWS = 17 ({30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30})
但这不起作用。当我们尝试向 JPanel 添加内容时,什么也没有显示。仅当我们手动编写第一个初始化时它才有效。这是为什么?
您将循环条件关闭了一个。应该是:
for (int i=0; i<Constants.GUI_COLS; i++)
for (int j=0; j<Constants.GUI_ROWS; j++)
size[i][j] = 30;
注意如果这个调用
p.setLayout(new TableLayout(size));
在此调用之前出现:
size = new double[Constants.GUI_ROWS][Constants.GUI_COLS];
size
引用的旧数组将由 TableLayout
使用。
要达到您手动完成的效果,您可以使用
double size[][];
size = new double[2][];
size[0]=new double[19];
size[1]=new double[17];
for (int i=0; i<19; i++)
size[0][i] = 30;
for (int i=0; i<17; i++)
size[1][i] = 30;