我刚刚开始使用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());
}
}
答案 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())
,您将获得该面板,然后添加它。在您的代码中,您将获得面板,但不会将其分配给任何内容。