无法从 JFrame 正确创建 JPanel



我正在尝试创建一个在发生特定操作时在框架上弹出的 JPanel。JFrame和JPanel是在两个独立的类中创建的,我一生都无法弄清楚如何正确使用它们。当我现在运行代码时,当操作发生时,JFrame 的顶角只出现一个小的 JPanel,它只显示基本的 mac 退出、最小化和最大化按钮。

带有 JFrame 的代码

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Gui extends JFrame
{
private JFrame mainFrame = new JFrame("Robber - Main menu");
private JFrame gameFrame = new JFrame("Robber - Game");
private final int WINDOW_SIZE_WIDTH = 905;
private final int WINDOW_SIZE_HEIGHT = 940;
public  void setMainFrame()
{
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setSize(900,900);
mainFrame.setResizable(false);
}
public void setGameFrame()
{
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameFrame.setSize(WINDOW_SIZE_WIDTH, WINDOW_SIZE_HEIGHT);
gameFrame.setResizable(false);
}
public void endGame()
{
NameBox name = new NameBox();
name.setVisible(true);
gameFrame.add(name);

带有 JPanel 的代码是

import java.util.*;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class NameBox extends JPanel implements KeyListener
{
private String name;
private JTextField userInput = new JTextField(10);
private JPanel centerPanel;
private JLabel centerText;
public NameBox()
{
centerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 15));
centerText = new JLabel("<html><center>" +"0"+ "<br /><center>Enter your name</html>" , JLabel.CENTER);
centerText.setFont(new Font("Britannic Bold", Font.PLAIN, 18));
centerText.setForeground(new Color(230,180,14));
centerPanel.add(centerText);
setLocation(327,407);
setSize(250, 125);
userInput.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent evt)
{
if(evt.getKeyCode() == KeyEvent.VK_ENTER)
{
submitAction();
}
}
});
centerPanel.add(userInput);
Box theBox = Box.createVerticalBox();
theBox.add(Box.createVerticalStrut(10));
theBox.add(centerPanel);
add(theBox);
}
public void submitAction()
{
name = userInput.getText();
}
public String getName()
{
return name;
}
public static void main(String[] args)
{
new NameBox().setVisible(true);
}
@Override
public void keyTyped(KeyEvent e){}
@Override
public void keyReleased(KeyEvent e){}
@Override
public void keyPressed(KeyEvent e){}
}

如果有人能帮助我处理可能构造得很差的代码,那就太神奇了!

JPanel本身不能显示,需要将其添加到某个容器中,该容器最终会附加到某种窗口,然后才能显示在屏幕上。 根据我对我们问题的了解,您想使用某种对话框,请参阅如何制作对话框以获取更多详细信息

作为一个粗略而现成的例子...

public void endGame()
{
NameBox name = new NameBox();
JOptionPane.showMessageDialog(gameFrame, name);
gameFrame.add(name);