簡體   English   中英

為什么最后一個添加到面板的項目會占據整個面板?

[英]Why does the last item added to a panel occupy the whole panel?

我在面板上添加了一定數量的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()方法,這會引起問題。 您不應嘗試使用布局管理器來自己管理組件的邊界。

解決方案是僅使用布局管理器,然后讓布局管理器完成其工作。 閱讀Swing教程中有關使用布局管理器的部分,以獲取更多信息,並使用更合適的布局管理器。

更新:

它是賓果游戲表

然后,也許您甚至都不應該使用JTextFields。 也許JTable將是更好使用的組件。 本教程還有關於How to Use Tables

您的問題在這里:

panel.setLayout(new BorderLayout());

您將布局設置為BorderLayout,然后將組件添加到JPanel,就好像它是GridLayout。 可以理解,以默認方式將組件添加到使用BorderLayout的容器中時,組件會添加到BorderLayout.CENTER位置中,該位置將填充該位置,從而覆蓋所有添加的內容。

也許您希望改為使用GridLayout? 您將需要閱讀布局管理器教程以獲取更多信息。

這是因為您正在使用BorderLayout和BorderLaout始終需要一個參數,例如BorderLayout.CENTER,BorderLayout.WEST,BorderLayout.EAST,BorderLayout.NORTH和BorderLayout.SOUTH。

因此,基本上BorderLayout僅具有5個可以放置組件的位置。 而且,如果您未指定添加組件的位置,則默認為BorderLayout.CENTER。 而且由於BorderLayout.CENTER位置一次只能有一個組件,因此它實際上僅添加了最后一個。 因此,我建議使用另一個布局管理器,例如GridLayout(如果您希望所有組件的大小均等)。

我希望這有幫助 :)。

PS:如果您希望我對GridLayout進行一些說明,請問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM