JPanel不会出现在JFrame(主类) - 初学者Java中

时间:2014-02-08 16:24:43

标签: java swing jframe jpanel

我刚刚开始使用Java ...我有一个问题就是创建一个单独的JPanel类放在主类(带有JFrame的那个)中,JPanel不会显示在主班。程序可以运行但只显示框架。我希望我能看到小组与'hallo'标签,但没有。

我知道我一直在寻找本网站的其他解决方案,但我并没有真正得到一些解决方案。

这是我的JPanel类:

import javax.swing.*;

public class CreatePanel extends JPanel
{
    private JPanel panel = new JPanel();
    private JLabel narrate;

    public void setNarrate(String label)
    {
        narrate = new JLabel(label);
        panel.add(narrate);
        panel.setVisible(true);
    }

    public JPanel getPanel()
    {
        return panel;
    }
}

这是JFrame的主要类:

import javax.swing.*;

public class Maine extends JFrame
{
    private static JFrame frame = new JFrame();

    public static void main(String[] args)
    {
        new Maine();

        CreatePanel panel1 = new CreatePanel();

        panel1.setNarrate("Hallo");
        panel1.getPanel();
        frame.add(panel1);
    }

    public Maine()
    {
        frame.setTitle("Detective Game");
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
        frame.setIconImage(new ImageIcon("agent.png").getImage());
    }
}

2 个答案:

答案 0 :(得分:2)

你的继承和构成令人困惑。您的CreatePanel类扩展了JPanel。所以这是一个JPanel。但是你在这个面板中没有任何组件,因为你所做的是创建另一个JPanel并为另一个JPanel添加标签。

简而言之,您的CreatePanel类应为:

public class CreatePanel extends JPanel {
    private JLabel narrate;

    public CreatePanel(String label) {
        narrate = new JLabel(label);
        this.add(narrate);
    }
}

也就是说,使用面板只包含标签是没用的。您可以直接将标签添加到框架中。

答案 1 :(得分:0)

您正在调用panel1.getPanel(),但除了占用内存之外没有做任何事情。执行frame.add(panel1.getPanel()),您将获得该面板,然后添加它。在您的代码中,您将获得面板,但不会将其分配给任何内容。