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

时间:2016-11-03 22:30:01

标签: 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();
            }
        });

    }

}

2 个答案:

答案 0 :(得分:2)

   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();

答案 1 :(得分:0)

感谢两位建议指引我朝着正确的方向前进!

最终工作的基本上是redxef首先提出的建议。 Camickr然后进一步帮助我,因为我在想我的方法都错了。通过将这两个JPanels组合到第一个方法并将其重命名为HelloWorld,我能够清理我遇到的其他一些问题。

我很高兴地报告,结果,该项目已经完成,并且大约需要一个小时的时间。再次,非常感谢!!