需要帮助在JFrame中安排JTextFields

时间:2012-01-28 00:25:41

标签: java swing jframe jtextfield

我正在java中制作一个Sudoku程序来学习一些算法,所以我希望用户能够输入一个未解决的数独谜题。这是我到目前为止创建的81(9x9)盒子:

JTextField input[] = new JTextField[80];
for(int i = 0; i <= 79; i++)
{   
    input[i] = new JTextField();
    input[i].setPreferredSize(new Dimension(30,30));
    f.getContentPane().add(input[i]);
}

当我运行这个程序时,我得到的只是一个输入字段。我知道所有文本字段并初始化,创建并添加到jframe中。我知道你必须弄乱布局,但我不知道该怎么做。任何帮助都是适当的。

2 个答案:

答案 0 :(得分:2)

JPanelGridLayout一起使用。

另外:

JTextField input[] = new JTextField[80];

这是80个(不是81个)文本字段。

更新(示例代码)

public class SodokuBoardDemo {

    public static void main(String... args) {
        SudokuBoard board = new SudokuBoard();    
        JFrame frame = new JFrame("Sodoku");
        frame.add(board);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);            
        frame.setVisible(true);
    }

    public static class SudokuBoard extends JPanel {

        public SudokuBoard() {
            setBorder(BorderFactory.createLineBorder(Color.GRAY));
            setLayout(new GridLayout(3, 3));
            BoardPart input[] = new BoardPart[9];
            for (int i = 0; i < 9; i++) {
                input[i] = new BoardPart();
                add(input[i]);
            }
        }

        public static class BoardPart extends JPanel {

            public BoardPart() {
                setBorder(BorderFactory.createLineBorder(Color.GRAY));
                setLayout(new GridLayout(3, 3));
                JTextField input[] = new JTextField[9];
                for (int i = 0; i < 9; i++) {
                    input[i] = new JTextField();
                    input[i].setPreferredSize(new Dimension(30, 30));
                    add(input[i]);
                }
            }
        }
    }
}

答案 1 :(得分:1)

如果您不确定如何使用不同的Layout,那么Oracle文档上会有a great tutorial。如果您想要了解组件本身,您还可以查看它们上的tutorial。 :)

ps:可能是我太困了,但看起来你已经创建了80个文本字段而不是81个。