2017-04-10 85 views
0

我试图创建一个JPanel,当发生特定操作时在框架上弹出。 JFrame和JPanel是在两个不同的类中创建的,我不能为了我的生活而弄清楚如何正确地使用它们。当我现在运行代码时,当动作发生时,只有一个微小的JPanel出现在JFrame的顶部角落,它只显示基本的MAC出口,最小化和最大化按钮。无法从JFrame正确创建JPanel

与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){} 

} 

如果有人能帮助我,我可能构成非常不好的代码,这将是惊人的!

+0

请不要用'的KeyListener '在文本组件上,'JTextField'使用'ActionListener',这就是它的设计目的 – MadProgrammer

+0

基于我对你的问题的理解,这听起来更像是你想用某种'JDialog'来显示一个弹出窗口 – MadProgrammer

+0

@MadProgrammer关于您的第一条评论,所以即使我希望它检测到用户按下输入时,我仍然应该使用ActionListeners? – mikecal7

回答

1

A JPanel本身不能显示,它需要被添加到某个容器,最终会附加到某种窗口,然后才能显示在屏幕上。从我能理解我们的问题,你想用某种形式的对话,请参阅How to make dialogs更多细节

作一个粗略的和现成的例子......

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