【问题标题】:Need help arranging JTextFields in JFrame需要帮助在 JFrame 中安排 JTextField
【发布时间】:2012-02-20 22:44:13
【问题描述】:

我正在用 java 制作一个数独程序来学习一些算法,所以我希望用户能够输入一个未解决的数独难题。这是我到目前为止创建的 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。我知道你必须弄乱这个布局,但我不知道该怎么做。任何帮助都是适当的。

【问题讨论】:

    标签: java swing jframe jtextfield


    【解决方案1】:

    使用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]);
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢,效果很好,我刚刚在循环之前添加了这个:f.setLayout(new GridLayout(9,9));
    • 还有什么方法可以将网格布局细分为 9 个 3x3 的框,这样看起来有点苦涩?
    • 没有。您需要使用多个 JPanel。
    【解决方案2】:

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

    ps:可能是我太困了,但您似乎创建了 80 个文本字段而不是 81 个。

    【讨论】:

      猜你喜欢
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2011-08-25
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多