1

我正在制作一个数独板 GUI,它应该看起来像这样http://www.sudoku.4thewww.com/Grids/grid.jpg

由于某种原因,它只显示最后一个 3*3 板。如果有人能告诉我我做错了什么,我将不胜感激,谢谢。

import java.awt.*;
import java.util.Random;
import java.awt.*; 
import java.awt.event.*;
import javax.swing.*;

public class gui2 extends JFrame{

private JTextField f[][]= new JTextField[9][9] ;
private JPanel p[][]= new JPanel [3][3];

public gui2(){
    super("Sudoku");
    setLayout(new GridLayout());

    for(int x=0; x<=8; x++){
        for(int y=0; y<=8; y++){
            f[x][y]=new JTextField(1);
        }
    }

    for(int x=0; x<=2; x++){
        for(int y=0; y<=2; y++){
            p[x][y]=new JPanel(new GridLayout(3,3));
        }
    }
    setLayout(new GridLayout(3,3,5,5));

for(int u=0; u<=2; u++){
    for(int i=0; i<=2; i++){    
        for(int x=0; x<=2; x++ ){
            for(int y=0; y<=2; y++){
            p[u][i].add(f[y][x]);
            }
        }
        add(p[u][i]);
    }
}



}

}
4

1 回答 1

1

此代码应该可以工作:

public class Gui2 extends JFrame{

    /**
     * 
     */
    private static final long serialVersionUID = 0;
    private JTextField f[][]= new JTextField[9][9] ;
    private JPanel p[][]= new JPanel [3][3];

    public Gui2(){
        super("Sudoku");

        for(int x=0; x<=8; x++){
            for(int y=0; y<=8; y++){
                f[x][y]=new JTextField(1);
            }
        }

        for(int x=0; x<=2; x++){
            for(int y=0; y<=2; y++){
                p[x][y]=new JPanel(new GridLayout(3,3));
            }
        }

        setLayout(new GridLayout(3,3,5,5));

        for(int u=0; u<=2; u++){
            for(int i=0; i<=2; i++){    
                for(int x=0; x<=2; x++ ){
                    for(int y=0; y<=2; y++){
                        p[u][i].add(f[y+u*3][x+i*3]);
                    }
                }
            add(p[u][i]);
            }
        }
    }
}

问题出在这一行:p[u][i].add(f[y][x]);. 您正在向每个面板一遍又一遍地添加相同的 9 个文本字段,但是Component添加的次数超过一次的文本字段会从前一个容器中删除。此行将p[u][i].add(f[y+3*u][x+3*i]);当前面板位置考虑在内,并使用整个JTextField数组。

于 2013-09-28T23:28:32.717 回答