我正在为java中的一些GUI设计而苦苦挣扎,我想改变另一个类中Jbutton的2D数组的大小。更改大小,将更改添加到框架上的按钮的数量。我尝试过使用实例变量和get()方法,但是在按钮数组上似乎不起作用。我只给出了下面的相关代码:
public class Minefield extends JFrame{
private JFrame frame;
private JPanel panel;
private int ROWS;
private int COLS;
private JButton[][] grid = new JButton[getRows()][getCols()];
public Minefield(int rows, int cols){
super("Minesweeper 1");
setRows(rows);
setCols(cols);
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[i].length; j++){
grid[i][j] = new JButton("[" + i + "][" + j + "]");
panel.add(grid[i][j]);
grid[i][j].addActionListener(handler);
}
container.add(panel);
}
}
public void setRows(int rows){
ROWS = rows;
}
public int getRows(){
return ROWS;
}
public void setCols(int cols){
COLS = cols;
}
public int getCols(){
return COLS;
}
}
下面是我想要运行GUI的测试类,在这个类中我不知道如何更改数组
public class MinefieldTest{
public static void main(String[] args){
Minefield minefield = new Minefield(4,2);
minefield.setVisible(true);
}
}
发布于 2018-08-17 04:30:59
然而,这个问题在你希望实现的目标中有点模糊,你不能在类初始化阶段(在构造函数之前运行)初始化数组,而是在构造函数中初始化。
这意味着将在初始化数组本身之前设置rows
和cols
的值。
下面演示了一个可能的工作流,该工作流允许您在构造类之后更改数组的大小(以及按钮的数量),从而使其成为动态的
public class Minefield extends JFrame {
private JPanel panel;
private int rows;
private int cols;
private JButton[][] grid;
public Minefield(int rows, int cols) {
super("Minesweeper 1");
setGridSize(cols, rows);
}
public void setGridSize(int cols, int rows) {
container.removeAll();
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
grid[i][j] = new JButton("[" + i + "][" + j + "]");
panel.add(grid[i][j]);
grid[i][j].addActionListener(handler);
}
container.add(panel);
}
container.revalidate();
container.repaint();
}
public int getRows() {
return rows;
}
public int getCols() {
return cols;
}
}
使用rows
和cols
的设置器没有什么意义,因为这会使重新构造数组变得非常困难,如果您想要提供在创建类后更改数组的能力,那么使用setGridSize
并同时传入这两个参数将使更新变得容易得多。否则,您可能应该忽略它们,只将它们传递给构造函数
https://stackoverflow.com/questions/51884774
复制相似问题