java - GroupLayout 未按预期运行

标签 java swing layout-manager jcomponent grouplayout

我正在尝试创建一个扫雷类型的游戏,并围绕顶部的 GridLayout 和底部的 JPanel 设计了界面。我在底部的信息面板上安排 JComponents 时遇到问题。我正在使用 GroupLayout 来排列信息面板中的项目。

下面是它应该如何出现的基本图:

Plan

这是实际结果:

Result

我不明白为什么最底部的 JLabel(较大的是 playerXTurnIndicator 标签)根本不显示。当然,当它们被默认添加到没有文本的组时,它们会采用水平或垂直布局指示的区域大小吗?

private void createComponents() {     
    playerOneNameLabel = new JLabel("Name : ");
    playerTwoNameLabel = new JLabel("Name : ");
    playerOneScoreLabel = new JLabel("Score : ");
    playerTwoScoreLabel = new JLabel("Score : ");

    playerOneNameDataLabel = new JLabel("");
    playerTwoNameDataLabel = new JLabel("");
    playerOneScoreDataLabel = new JLabel("0");
    playerTwoScoreDataLabel = new JLabel("0");

    playerOneTurnIndicatorLabel = new JLabel();
    playerOneTurnIndicatorLabel.setBackground(Color.GREEN);
    playerOneTurnIndicatorLabel.setPreferredSize(new Dimension(100, 20));

    playerTwoTurnIndicatorLabel = new JLabel();
    playerTwoTurnIndicatorLabel.setBackground(Color.RED);
    playerTwoTurnIndicatorLabel.setPreferredSize(new Dimension(100, 20));

    infoMinesRemainingLabel = new JLabel("Mines Remaining : ");
    infoMinesRemainingData = new JLabel("0");

    infoTileCoordLabel = new JLabel("Tile : ");
    infoTileCoordDataLabel = new JLabel("0, 0");

    playerOneBombButton = new JButton("Bomb");
    playerTwoBombButton = new JButton("Bomb");

    GroupLayout layout = new GroupLayout(this);

    layout.setAutoCreateContainerGaps(true);
    layout.setAutoCreateGaps(true);

    layout.setHorizontalGroup(
            layout.createSequentialGroup()
                .addGroup(
                    layout.createSequentialGroup()
                        .addGroup(
                            layout.createParallelGroup()
                                .addGroup(
                                    layout.createSequentialGroup()
                                        .addComponent(playerOneNameLabel)
                                        .addComponent(playerOneNameDataLabel))
                                .addGroup(
                                    layout.createSequentialGroup()
                                        .addComponent(playerOneScoreLabel)
                                        .addComponent(playerOneScoreDataLabel))
                                .addComponent(playerOneTurnIndicatorLabel))
                        .addComponent(playerOneBombButton))
                .addGap(10)
                .addGroup(
                    layout.createSequentialGroup()
                        .addGroup(
                            layout.createParallelGroup()
                                .addComponent(infoMinesRemainingLabel)
                                .addComponent(infoTileCoordLabel))
                        .addGroup(
                            layout.createParallelGroup()
                                .addComponent(infoMinesRemainingData)
                                .addComponent(infoTileCoordDataLabel)))
                .addGap(10)
                .addGroup(
                    layout.createSequentialGroup()
                        .addComponent(playerTwoBombButton)
                        .addGroup(
                            layout.createParallelGroup()
                                .addGroup(
                                    layout.createSequentialGroup()
                                        .addComponent(playerTwoNameLabel)
                                        .addComponent(playerTwoNameDataLabel))
                                .addGroup(
                                    layout.createSequentialGroup()
                                        .addComponent(playerTwoScoreLabel)
                                        .addComponent(playerTwoScoreDataLabel))
                                .addComponent(playerTwoTurnIndicatorLabel))));

    layout.setVerticalGroup(
            layout.createParallelGroup()
                .addGroup(
                    layout.createParallelGroup()
                        .addGroup(
                            layout.createSequentialGroup()
                                .addGroup(
                                    layout.createParallelGroup()
                                        .addComponent(playerOneNameLabel)
                                        .addComponent(playerOneNameDataLabel))
                                .addGroup(
                                    layout.createSequentialGroup()
                                        .addGroup(
                                            layout.createParallelGroup()
                                                .addComponent(playerOneScoreLabel)
                                                .addComponent(playerOneScoreDataLabel)))
                                .addComponent(playerOneTurnIndicatorLabel))
                        .addComponent(playerOneBombButton)
                    )
                .addGap(50)
                .addGroup(
                    layout.createSequentialGroup()
                        .addGroup(
                            layout.createParallelGroup()
                                .addComponent(infoMinesRemainingLabel)
                                .addComponent(infoMinesRemainingData))
                        .addGroup(
                            layout.createParallelGroup()
                                .addComponent(infoTileCoordLabel)
                                .addComponent(infoTileCoordDataLabel)))
                .addGap(50)
                .addGroup(
                    layout.createParallelGroup()
                        .addComponent(playerTwoBombButton)
                        .addGroup(
                            layout.createSequentialGroup()
                                .addGroup(
                                    layout.createParallelGroup()
                                        .addComponent(playerTwoNameLabel)
                                        .addComponent(playerTwoNameDataLabel))
                                .addGroup(
                                    layout.createParallelGroup()
                                        .addComponent(playerTwoScoreLabel)
                                        .addComponent(playerTwoScoreDataLabel))
                                .addComponent(playerTwoTurnIndicatorLabel))));

    this.setLayout(layout);
}

问候,

杰米

最佳答案

显示了 JLabel(因此显示了底部的可用空间),但没有颜色。请改用 JPanels(背景仅适用于不透明组件,请参阅 http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#setBackground%28java.awt.Color%29)。

关于java - GroupLayout 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731062/

相关文章:

java - 在具有卡片布局的 JPanel 中的两个 JPanel 之间交换

java - 具有可折叠 JPanel 的容器的首选布局管理器是什么

java - Android 应用程序的时间圈动画

java - Eclipse:编辑器顶部的大纲叫什么?我怎样才能改变它的颜色或禁用它?

java - 具有不同状态的值对象的验证 - 密码大小写

java - 对固定大小的组件使用覆盖 getPreferredSize() 而不是使用 setPreferredSize()

java - Color.RED(大写)和 Color.red 有什么区别?

java - 使用 GridBagLayout 将 JPanel 内的组件居中

java - 如何使用 equals hashcode 和 toString 与两个有循环的对象进行 Lombok 操作?

java - CustomTableModel + JTable = 表未填充