这行代码是否有意义?

时间:2014-04-26 04:16:03

标签: java user-interface

我在使用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;
        }

    }

}

2 个答案:

答案 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)。这些单元格将添加到JPanelCell)类的子项中。

希望你理解它!


编辑:

在评论中,您说过即使您从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]);