Java 这行代码有意义吗?
我曾经很难用文本字段制作数独网格,直到我在dreamincode上遇到一些人的代码,但他们没有真正解释,我想知道这里是否有人可以向我解释cells类。我一直在想这个问题,因为即使这个类是空的,网格仍然可以工作,所以我很困惑。谢谢Java 这行代码有意义吗?,java,user-interface,Java,User Interface,我曾经很难用文本字段制作数独网格,直到我在dreamincode上遇到一些人的代码,但他们没有真正解释,我想知道这里是否有人可以向我解释cells类。我一直在想这个问题,因为即使这个类是空的,网格仍然可以工作,所以我很困惑。谢谢 import java.awt.*; import javax.swing.*; import javax.swing.border.*; public class Squares extends JPanel { public final int CEL
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;
}
}
}
单元格是扩展JTextField的内部类。它真正做的就是设置/获取一个数字并显示它 这可能令人困惑:
public Cell [] cells = new Cell[CELL_COUNT];
他在这里做的是创建一个类型单元格数组。就像你有一个整数或字符串数组一样,这个数组有一个单元格类型
在这里,他初始化数组单元格的每个元素:
cells[i] = new Cell();
这会将其添加到网格中,注意它扩展了jpanel:
this.add(cells[i]);
我不是Java专业人士,但我会尽力解释清楚
public class Squares extends JPanel
类Squares扩展了JPanel,这意味着它是JPanel类的子类,并且将作为一个子类来运行。因此,就像您将内容添加到JPanel中一样,您可以将内容标签、文本字段等直接添加到Squares类中
类似地,类单元格扩展了JTextField,这意味着该类的对象的行为类似于textfield。setText可以用于它们,并且可以将它们添加到JPanel中
这是Squares类的构造函数
在这个构造函数中,首先设置了布局和边框。然后运行一个循环,该循环实例化Cell类的新对象,这些对象基本上是JTextFields。这些单元格被添加到JPanel类的子类中
希望你能理解
编辑:
在一篇评论中,您说即使从Cell类中删除所有内容,它仍然有效。这是因为该类扩展了JTextField,并获取其父类的所有属性。只需删除extends JTextField。那就不行了。要求解释该代码?很像我说的,我找到了它,但作者没有解释,我发现它很有趣,我可以从Cells类中删除所有内容,它仍然可以工作
public class Cell extends JTextField
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]);
}
}