java - GridLayout 未在 JFrame 中显示

标签 java swing jpanel layout-manager grid-layout

我有一个 GridLayout(2,1),由另外两个 GridLayout(8,4) 组成。我将 (2,1) 布局添加到我的主 JFrame 中,但当我运行它时,仅显示 8,4 布局之一。我想要发生的是它们都堆叠在一起。

import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Pos extends JFrame {

JTextField oneTicks;
JTextField twoTicks;
JTextField threeTicks;
JTextField fiveTicks;
JTextField tenTicks;
JTextField twentyTicks;
JTextField twentyFiveTicks;
JTextField thirtyTicks;

JTextField[] ticks = { oneTicks, twoTicks, threeTicks, fiveTicks, tenTicks,
        twentyTicks, twentyFiveTicks, thirtyTicks };

JTextField oneAmount;
JTextField twoAmount;
JTextField threeAmount;
JTextField fiveAmount;
JTextField tenAmount;
JTextField twentyAmount;
JTextField twentyFiveAmount;
JTextField thirtyAmount;

JTextField[] amounts = { oneAmount, twoAmount, threeAmount, fiveAmount,
        tenAmount, twentyAmount, twentyFiveAmount, thirtyAmount };

JLabel oneLabel = new JLabel("$ 1 Games");
JLabel twoLabel = new JLabel("$ 2 Games");
JLabel threeLabel = new JLabel("$ 3 Games");
JLabel fiveLabel = new JLabel("$ 5 Games");
JLabel tenLabel = new JLabel("$ 10 Games");
JLabel twentyLabel = new JLabel("$ 20 Games");
JLabel twentyFiveLabel = new JLabel("$ 25 Games");
JLabel thirtyLabel = new JLabel("$ 30 Games");

JLabel[] gameLabel = { oneLabel, twoLabel, threeLabel, fiveLabel, tenLabel,
        twentyLabel, twentyFiveLabel, thirtyLabel };

JLabel oneXLabel = new JLabel("X $ 1");
JLabel twoXLabel = new JLabel("X $ 2");
JLabel threeXLabel = new JLabel("X $ 3");
JLabel fiveXLabel = new JLabel("X $ 5");
JLabel tenXLabel = new JLabel("X $ 10");
JLabel twentyXLabel = new JLabel("X $ 20");
JLabel twentyFiveXLabel = new JLabel("X $ 25");
JLabel thirtyXLabel = new JLabel("X $ 30");

JLabel[] multiLabel = { oneXLabel, twoXLabel, threeXLabel, fiveXLabel,
        tenXLabel, twentyXLabel, twentyFiveXLabel, thirtyXLabel };

Pos() {
    initJTextField(ticks);
    initJTextField(amounts);

    JPanel lottoPanel = new JPanel(new GridLayout(2, 1));

    JPanel startGrid = new JPanel(new GridLayout(8, 4));
    JPanel endGrid = new JPanel(new GridLayout(8, 4));

    initLottoPanel(startGrid);
    initLottoPanel(endGrid);

    lottoPanel.add(startGrid);
    lottoPanel.add(endGrid);

    this.add(lottoPanel, BorderLayout.LINE_START);

}

// init all JTextfields
void initJTextField(JTextField[] jArray) {
    for (int i = 0; i < ticks.length; i++) {
        jArray[i] = new JTextField();
    }
}

void initLottoPanel(JPanel panel) {
    for (int i = 0; i < gameLabel.length; i++) {
        panel.add(gameLabel[i]);
        panel.add(ticks[i]);
        panel.add(multiLabel[i]);
        panel.add(amounts[i]);
    }
}

public static void main(String[] args) {
    Pos pos = new Pos();
    pos.setSize(600, 600);
    pos.setLocationRelativeTo(null);
    pos.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pos.pack();
    pos.setVisible(true);
}

}

最佳答案

两个面板都被添加到 JFrame 中,但其中一个完全是空的。当您调用 initLottoPanel 方法时,您实际上是将所有子组件(JLabels、JTextFeild 等)重新分配给正在传递的新面板。

要解决此问题,您需要有两组子组件,每组仅对应一个面板。

关于java - GridLayout 未在 JFrame 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269848/

相关文章:

java - 无法让 Java2D 将简单的线条渲染到 Graphics 对象

java - 在JAVA Eclipse中添加背景到JPANEL

java - 如何在 Java Swing 中获取面板的所有组件?

Java Scanner nextLine 方法

java - 无法在 Java 中的图像面板中显示图像

java - 查找具有指定数量奇数的子数组的数量

java - 2 个 JFrames 有 2 个单独的关闭按钮?

java - 在没有布局管理器的情况下将 JScrollPane 添加到 JPanel

java - Java多线程-运行线程仅按顺序运行方法一次

java - 错误 :Cause: failed to find target with hash string 'Google Inc.:Google APIs:23' in: E:\AndroidStudio\SDK