我在使用textfields制作数独网格时遇到了困难,直到我遇到了dreamincode上的某些代码,但他们并没有真正解释,我想知道是否有人可以向我解释细胞类。我一直在想这个,因为即使班级是空的,网格仍然有效,所以我很困惑。感谢。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class Squares extends JPanel {
public final int CELL_COUNT = 9;
public Cell [] cells = new Cell[CELL_COUNT];
public Squares(){
this.setLayout(new GridLayout(3,3));
this.setBorder(new LineBorder(Color.BLACK,2));
for(int i = 0; i<CELL_COUNT; i++){
cells[i] = new Cell();
this.add(cells[i]);
}
}
public class Cell extends JTextField{
private int number;
public Cell(){
}
public void setNumber(int number){
this.number = number;
this.setText("1");
}
public int getNumber(){
return number;
}
}
}
答案 0 :(得分:1)
我不是Java Pro,但我会尽力解释它。
public class Squares extends JPanel
班级Squares
扩展JPanel
,这意味着它是JPanel
班级的孩子,并且会表现为一个孩子。因此,就像您在JPanel
中添加内容一样,您可以将内容(标签,文本字段等)直接添加到Squares
类中。
public class Cell extends JTextField
同样,类Cell
扩展JTextField
,这意味着此类的对象的行为类似于文本字段。可以在setText()
上使用JPanel
,并将其添加到Squares
。
以下是public Squares(){
this.setLayout(new GridLayout(3,3));
this.setBorder(new LineBorder(Color.BLACK,2));
for(int i = 0; i<CELL_COUNT; i++){
cells[i] = new Cell();
this.add(cells[i]);
}
}
类
Cell
在此构造函数中,首先设置了布局和边框。然后运行一个循环,该循环实例化JTextField
类的新对象(基本上是Squares
s)。这些单元格将添加到JPanel
(Cell
)类的子项中。
希望你理解它!
在评论中,您说过即使您从JTextField
课程中删除了所有内容,它仍然有效。那是因为类扩展了extends JTextField
并且它获得了其父类的所有属性。只需尝试删除{{1}}即可。那不行。
答案 1 :(得分:0)
单元格扩展JTextField的内部类。所有它真正做的是设置/获取一个数字并显示它。
这可能令人困惑:
public Cell [] cells = new Cell[CELL_COUNT];
他在这里做的是创建一个Cell类型的数组。就像你有整数数组或字符串一样,这个有一个Cell类型。
在这里,他初始化了数组单元格的每个元素:
cells[i] = new Cell();
并将其添加到网格中(注意它扩展了jpanel):
this.add(cells[i]);