2017-04-10 11 views
0

特定のアクションが発生したときにフレームにポップアップするJPanelを作成しようとしています。 JFrameとJPanelは別々の2つのクラスで作成されており、私の人生にとっては、それらを適切に利用する方法を理解できません。アクションが発生するとすぐにコードを実行すると、小さなJPanelがJFrameの上隅に表示され、基本的なmac exit、minimize、およびmaximizeボタンのみが表示されます。誰もが素晴らしいだろうと、私はおそらく非常に悪い構成されたコードで私を助けることができる場合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

JPanelは、それ自体では表示できません。最終的には、画面に表示される前に、ある種のウィンドウにアタッチされるコンテナに追加する必要があります。私は、我々の問題を理解することができるものから、あなたがラフと準備が例として詳細

ためHow to make dialogsを参照してください、ダイアログのいくつかの種類を使用したい...

public void endGame() 
{ 
    NameBox name = new NameBox(); 
    JOptionPane.showMessageDialog(gameFrame, name); 
    gameFrame.add(name); 
関連する問題