1

我有一个 JPanel、窗口和一个 JPanel 和 JLabels 数组。我想向 JFrame 添加 5 个 JPanel,向每个 JPanel 添加一个 JLabel。每个 JPanel 将用于表示有关 Dice 的数据。

但是,当我运行代码时,只有最后一个 JPanel 出现在 JFrame 上,并带有文本“Dice 4”。我不明白为什么。

编码:

public static void main(String args[]) {

    JFrame window = new JFrame("DICE Frame");
    window.setVisible(true);
    window.setTitle("DIE");
    window.setSize(400, 200);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel[] diceView=new JPanel[5];
    JLabel[] labels=new JLabel[5];
    for(int i=0; i<diceView.length; i++) {

        diceView[i]=new JPanel();

        window.add(diceView[i]);

        labels[i]=new JLabel();
        labels[i].setText("Dice "+i);
        diceView[i].add(labels[i]);

    }
}
4

3 回答 3

3

JFrame 的 contentPane(调用时添加JFrame#add(...)的内容)默认使用 BorderLayout,并且每当您以默认方式向其中添加组件时,组件都会添加 BorderLayout.CENTER。

解决方案是将您的其他 JPanel 添加到使用您认为需要的任何布局的 JPanel(或使用布局的嵌套 JPanel),然后将此容器 JPanel 添加到您的 JFrame、BorderLayout.CENTER。

请查看布局管理器教程以了解更多信息。要理解的一个关键概念是您可以嵌套 JPanel,每个 JPanel 都使用自己的简单布局管理器,从而仅使用简单易用的布局管理器来实现复杂的布局。

于 2013-10-17T22:43:50.307 回答
2

因为您的 JPanel 一遍又一遍地添加,Dice 0、Dice 1、Dice 2、Dice 3 停留在 Dice 4 下,因此您只能看到 Dice 4。如果您想查看其他 Dice,那么您应该使用 flowlayout、boxlayout 等布局...

于 2013-10-17T22:43:53.587 回答
2

您指定JFrame了默认值BorderLayout。尝试使用不同的布局,如下所示:

window.setLayout(new FlowLayout());

您将看到您的其他 JPanel。 查看此内容以获取更多详细信息

于 2013-10-17T22:48:45.647 回答