java - 为什么最后添加到面板的项目会占据整个面板?

标签 java swing

我正在向一个面板中添加一些 JTextField,并且所有这些都被添加了,但是,最后添加的一个占用了整个面板并且似乎所有其他文本框都添加到了最后一个。 ....这是代码

public JPanel crearCartonFormulario() {
    panel = new JPanel();
    panel.setLayout(new BorderLayout());
    JTextField[] textBoxes = new JTextField[25];
    int cont = 0;
    int posX = 10;
    int posY = 0;
    llenarArreglo();
    while (cont <= 4) {
        for (int i = 0; i <= 4; i++) {

            if (cont == 2 && i == 2) {
                textBoxes[i] = new JTextField("");
            } else {
                textBoxes[i] = new JTextField(String.valueOf(numeros[cont][i]));
            }
            textBoxes[i].setBounds(i + posX, 15 + posY, 40, 40);
            textBoxes[i].setEditable(false);
            panel.add(textBoxes[i]);
            posX += 50;
        }
        posY += 50;
        posX = 10;
        cont++;
    }
    return panel;
}

这是在一个面板上返回的,我保留了这个面板的多个面板,它可以工作,但在这个面板中,最后一个 JTextField 占据了整个面板空间....

包含由该方法创建的面板的新 JFrame 采用最后一个 JTextField 大小并且该文本框不采用该方法指示的边界,但是所有其他文本框仍在内部并已正确添加。

最佳答案

panel.setLayout(new BorderLayout());

您正在使用 BorderLayout。

panel.add(textBoxes[i]);

当您使用 add() 方法时,默认情况下会将组件添加到 BorderLayout 的 CENTER。但是,只能将单个组件添加到中心,因此布局管理器将只管理最后添加的组件的大小/位置。 BorderLayout 的规则是让组件占据所有可用空间。

但是,您还对导致问题的其他文本字段使用了 setBounds() 方法。您不应尝试使用布局管理器并自行管理组件的边界。

解决方案是只使用布局管理器,让布局管理器完成它的工作。阅读 Using Layout Managers 上的 Swing 教程部分获取更多信息并使用更合适的布局管理器。

更新:

its a bingo table

那么也许您甚至不应该使用 JTextFields。也许 JTable 是一个更好用的组件。本教程还有一个关于如何使用表格的部分。

关于java - 为什么最后添加到面板的项目会占据整个面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191250/

相关文章:

Java : URLConnection setRequestProperty range issue relying on multithreaded process?

java - 如果我们一开始不知道字符串的数量,如何创建动态字符串数组?

java - new之后如何调用java重写函数

java - AutomaticPlaceholderConstraint 占位符无法满足契约

java - JMenuBar 未显示

java - 可以在 JSlider 中捕捉到某些值吗?

java - 在 Swing 中打印度数符号 (°) 时出现问题

java - JXTreeTable 可编辑示例?

java - 将一个应用程序嵌入到另一个应用程序中

java - 我应该在 netbeans 中创建 Images 文件夹吗