Java Sudoku GUI板

时间:2013-09-28 23:13:01

标签: java user-interface

我正在制作一个Sudoku棋盘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]);
    }
}



}

}

1 个答案:

答案 0 :(得分: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数组。