Java 这行代码有意义吗?

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

我曾经很难用文本字段制作数独网格,直到我在dreamincode上遇到一些人的代码,但他们没有真正解释,我想知道这里是否有人可以向我解释cells类。我一直在想这个问题,因为即使这个类是空的,网格仍然可以工作,所以我很困惑。谢谢

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]);
    }
}