我正在制作一个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]);
}
}
}
}
答案 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
数组。