java - 如何在 Java 面板中使用网格布局?

标签 java swing jframe jpanel grid-layout

我正在尝试创建一个带有两个面板的 JFrame。顶部面板将包含一个文本字段,底部面板将包含一个按钮网格。我已经使用 gridLayout 来排列按钮并将它们添加到面板中并将面板添加到 JFrame 但根据编辑器,面板的值为 NULL。第二面板也是同样的情况。有人可以帮助我解决问题吗?

import java.awt.*;
import javax.swing.*;

public class frameClass extends JFrame{
    private static final long serialVersionUID = 1L;
private JFrame frame;

private JPanel panel;
private JPanel panel2;

private JButton button0;
private JButton button1;
private JButton button2;
private JButton button3;

public frameClass() {
    panel = new JPanel(new GridLayout(4,4,5,5));            

    panel.setBackground(Color.BLACK);

    Font font1 = new Font("SanSerif",Font.BOLD, 16);

    button0 = new JButton("0");
    button0.setFont(font1);
    button0.setBackground(Color.BLACK);
    button0.setForeground(Color.WHITE);
    panel.add(button0);

    button1 = new JButton("1");
    button1.setFont(font1);
    button1.setBackground(Color.WHITE);
    panel.add(button1);

    button2 = new JButton("2");
    button2.setFont(font1);
    button2.setBackground(Color.BLACK);
    button2.setForeground(Color.WHITE);
    panel.add(button2);

    button3 = new JButton("3");
    button3.setFont(font1);
    button3.setBackground(Color.WHITE);
    panel.add(button3);

            frame.add(panel);
            panel2 = new JPanel(new BorderLayout());
    panel2.add(new JTextField(21), BorderLayout.CENTER);

    frame.add(panel2);
    frame.setVisible(true);
}
public static void main(String[] args) {
    new calculator();       
}
}

最佳答案

“核心”问题不是面板为空,而是frame为空...

// You extend from JFrame, which isn't highly recommended
// but you seem to ignore...
public class FrameClass extends JFrame {

    private static final long serialVersionUID = 1L;
    // Instance variable of frame, but it's never initialised...
    private JFrame frame;

    private JPanel panel;
    private JPanel panel2;

    //...

    public FrameClass() {
        // Create panel...
        panel = new JPanel(new GridLayout(4, 4, 5, 5));
        panel.setBackground(Color.BLACK);

        //...

        // Add it to frame, but frame is null...
        frame.add(panel);

        //...
    }

相反,请尝试删除 extends JFrame 并实例化 JFrame

public class FrameClass {

    private static final long serialVersionUID = 1L;
    private JFrame frame;

    private JPanel panel;
    private JPanel panel2;

    //...

    public FrameClass() {
        panel = new JPanel(new GridLayout(4, 4, 5, 5));

        //...

        frame = new JFrame("Testing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(panel);
        panel2 = new JPanel(new BorderLayout());
        panel2.add(new JTextField(21), BorderLayout.CENTER);

        frame.add(panel2);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

关于java - 如何在 Java 面板中使用网格布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013916/

相关文章:

java - 主要监听器和执行的操作

java - StartSwing Gui 并不总是可见

java - 框架 2 位于框架 1 内

java - ViewRootImpl.setPausedForTransition(boolean) NullPointerException 在 ActivityTransitionCoordinator 中转换到其他 Activity 调用过早

java - 二维数组 int 的 ArrayList

"Enter"之后的 Java 清除文本字段

java - JFrame 着色应该喜欢这张图片

java - Selenium WebDriver 无法通过@FindBy 注释找到元素

java - 在Java中,获取给定月份的所有周末日期

java - 如何使用 JFrame 按钮启动第二个 JFrame 而无需在 Java 中启动更多 JFrame?