2017-11-23 9 views
0

Javaの小さなゲーム用のメニュウを作成しようとしています。私はWindowクラス(JFrameを拡張する)を持って、別のScreens(Menue、Game、GameOverなど)用にJPanelを置くことをお勧めします。 JFrameにボタンやものを直接置くと私はJPanelをJFrameに入れようとすると動作しません。ここでは、コードは次のとおりです。jframeでjpanelを表示する方法

public class Window extends JFrame{ 



    private final int WIDTH = 800; 
    private final int HEIGTH = 600; 
    private final int QUADRAT = 50; 

    JButton startButton; 
    JButton exitButton; 
    JButton anleitungButton; 
    JLabel gameTitle; 

    public Window() { 
     super("Study Run"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(null); 
     setSize(WIDTH, HEIGTH); 
     setResizable(false); 
     getContentPane().add(new MenuePanel()); 
     setVisible(true); 
     setLocationRelativeTo(null); 

    } 

そして、これは私のパネルです:

public class MenuePanel extends JPanel{ 

JButton startButton; 
JButton exitButton; 
JButton anleitungButton; 
JLabel gameTitle; 


public MenuePanel() { 
    super(); 
    setBackground(Color.CYAN); 

    gameTitle = new JLabel("StudyRun", SwingConstants.CENTER); 
    gameTitle.setBounds(200, 25, 400, 75); 
    gameTitle.setFont(new Font("Arial", Font.ITALIC, 36)); 
    add(gameTitle); 

    startButton = new JButton("start"); 
    startButton.setBounds(325, 125, 150, 50); 
    add(startButton); 
    anleitungButton = new JButton("anleitung"); 
    anleitungButton.setBounds(325, 200, 150, 50); 
    add(anleitungButton); 
    exitButton = new JButton("exit"); 
    exitButton.setBounds(325, 450, 150, 50); 
    add(exitButton); 

    CloseListener closeListener = new CloseListener(); 
    StartListener startListener = new StartListener(); 
    AnleitungListener anleitungListener = new AnleitungListener(); 
    startButton.addActionListener(startListener); 
    anleitungButton.addActionListener(anleitungListener); 
    exitButton.addActionListener(closeListener); 
} 

私はオンラインを見つけた唯一の助けは、私が目に見えるフレームを設定する前に、私は、パネルを追加するために必要なことでした。それはうまくいかなかった。 pack()またはrevalidate()をコードのどこに置いても機能しませんでした。パネルを不透明または可視に設定しても、何もしませんでした。他に何を試していいのか分かりませんか?

答えて

4

あなたの問題はここにある:

setLayout(null); 

あなたがnullのレイアウトを使用し、あなたコーダは場所とサイズ追加されたすべてのコンポーネントののための完全に責任があります。追加したコンポーネント、0に何のサイズとそのデフォルトはありません0

A(悪い)ソリューション:MenuePanelにサイズや境界

はるかに優れたソリューション提供:レイアウトマネージャを学習し、使用を(すべてのあなたのようにすでにあなたに語られていると確信している)。

+0

はどうもありがとうございました

class MyFrame{ add(new SomePanel().getPanel()); 

} ..のJFrameに追加します。私はいくつかの異なるスクリーンタイプを持っているので、BorderLayoutは最高でしょうか?私のmenueは真ん中に3つの縦に並んだボタンを持っています、ゲームはちょうどゲームパネルですgameoverscreenは中央に下部とテキストのボタンがありますか? – N00bine

+1

@ N00bine:ワンサイズのレイアウトはありません。通常、単純に複雑なレイアウトを実現するために、それぞれ独自のレイアウトマネージャを使用するJPanelをネストします。チュートリアルを勉強してください。 –

+1

@ N00bine:時間の90%でも、私のメイン* JPanelはBorderLayoutを使用します。 –

0

JavaはFlowlayout()をデフォルトとして使用することを忘れないでください。だからあなたは基本的にあなたが別のクラスからのJFrameに追加する別のクラスやパネルを使用する場合のように、前answer.Alsoで説明をnullにレイアウトを上書き

public Window() { 

    setLayout(new FlowLayout()); 
} 

class SomePanel{ 
public JComponent getPanel(){ 
return panel; 
} 
} 

ゲッターを使用しますその後

関連する問題