java - 我应该如何在 JLabel 下面添加 JButtons 的 GridLayout?

标签 java swing jlabel layout-manager grid-layout

所以,我正在为我的 Java 类开发一个项目。目标是创建一个基本的 GUI 程序,将 Hello World 显示为字符串,并提供四个按钮用于操作该字符串。像这样的:example

我什至还没有到达程序的操作部分,因为无论我如何尝试,我似乎都无法正确设置窗口格式。

我能够显示我的四个按钮,但是我为让 JLabel 在按钮上方显示 Hello World 所做的一切都让我完全失败。

这看起来非常简单,所以我担心我遗漏了一些明显的东西。我在网上搜索了一周,发现了很多关于理论上如何做到这一点的信息,所以根据我的理解,这肯定是我的语法有问题。

到目前为止,我还没有找到一个可以完成我需要做的事情的实现。这让我发疯,无论如何我都会超过预产期。我只是需要一个答案!非常感谢任何能给我指明正确方向的人!

这是我当前形式的代码。我觉得我已经接近这个目标了,但它在运行时向控制台返回一个异常。再次感谢所有帮助!

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

public class HelloWorld
{   
    private JButton uppercaseButton;
    private JButton lowercaseButton;
    private JButton phraseButton;
    private JButton resetButton;

    private JPanel grid;

    public JPanel ButtonGrid()
    {

        JPanel grid = new JPanel();

        grid.setLayout(new GridLayout(2, 2));
        uppercaseButton = new JButton("Uppercase");
        lowercaseButton = new JButton("Lowercase");
        phraseButton = new JButton("New Phrase");
        resetButton = new JButton("Reset");     

        grid.add(uppercaseButton);
        grid.add(lowercaseButton);
        grid.add(phraseButton);
        grid.add(resetButton);

        return grid;
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("THIS IS MY TITLE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel lbl = new JLabel("HELLO WORLD");
        lbl.setPreferredSize(new Dimension(175, 100));
        frame.getContentPane().add(lbl, BorderLayout.PAGE_START);

        ButtonGrid b = new ButtonGrid();
        b.setVisible( true );
        b.setSize( 300, 200 );
        frame.getContentPane().add(b, BorderLayout.CENTER);

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

    public static void main( String[] args ){

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });

    }

}

最佳答案

   ButtonGrid b = new ButtonGrid();

ButtonGrid 不是一个类,它是 HelloWorld 类的一个方法,返回 JPanel 的实例。

因此您需要创建 HelloWorld 类的实例,以便可以调用该方法:

HelloWord hw = new HelloWorld()
JPanel b = hw.ButtonGrid();

由于“buttonGrid”是一种方法,因此不应以大写字符开头,因此您需要重命名该方法,然后使用:

//ButtonGrid b = new ButtonGrid();
HelloWord hw = new HelloWorld()
JPanel b = hw.buttonGrid();

关于java - 我应该如何在 JLabel 下面添加 JButtons 的 GridLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412316/

相关文章:

java - 我在函数中遇到空指针异常,不知道如何修复它

java - Query#scroll() 在 Hibernate 中被弃用是因为什么?

java - 如何在 netbeans JFrame 编辑器中显示自定义对话框?

java - 在另一个 JLabel 之上部分显示 JLabel

java - java Canvas 上耗时

java - 带有 git 的 Intellij - 内容仅在行分隔符上有所不同

Java:如何使滚动条以恒定速度滚动?

java - 从 javax.swing.text.Document 实例获取所有监听器

Java:创建全局图形对象

java - 我怎样才能使 JLabel 在一段时间后消失?