0

簡単なテニスゲームを書く必要があります。異なるウィンドウ (メイン メニューのパネル、ゲームのパネル、設定のパネル) 間を移動するには、内部クラスを使用して JPanel を拡張し、いくつかのイベントがstart new game発生したときにそれを置き換えることにしました。

しかし問題は、私の内部クラスが見えないことです。つまり、JFrameに追加します

mainframe.add(new MainMenuPanel());

しかし、プログラムを実行しても画面には何も表示されません。どうしたの?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class MainFrame{
JFrame mainframe;

public static void main(String[] args){
    new MainFrame();
}

public MainFrame() {
    mainframe = new JFrame();
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainframe.setSize(300, 400);
    mainframe.setTitle("X-Tennis v0.1");

    mainframe.add(new MainMenuPanel());

    mainframe.getContentPane().setLayout(new GridLayout());
    mainframe.getContentPane().setBackground(Color.WHITE);
    mainframe.setVisible(true); 
}

public class MainMenuPanel extends JPanel {

    JPanel mainmenupanel;
    JLabel label1;
    JButton btnNewGame,btnJoinGame;
    ImageIcon iconNewGame,iconJoinGame;

    public MainMenuPanel(){
        mainmenupanel = new JPanel();

        label1 = new JLabel("X-TENNIS");
        label1.setFont(new Font("Comic Sans MS",Font.ITALIC,20));
        label1.setForeground(Color.BLUE);

        btnNewGame = new JButton("New Game", iconNewGame);
        btnNewGame.setFocusPainted(false);
        btnNewGame.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent e){
                        JOptionPane.showMessageDialog(mainframe, "New game");
                        //delete current panel and add another to mainframe
                    }
                }
        );
        btnNewGame.setPreferredSize(new Dimension(140,30));     
        btnJoinGame = new JButton("Join game",iconJoinGame);    
        mainmenupanel.add(label1);
        mainmenupanel.add(btnNewGame);
    }
}
}
4

4 に答える 4

3

MainMenuPanel はそれ自体であるためmainmenupanel、クラス内での必要はありませんMainMenuPanelJPanel

すべてのコンポーネントMainMenuPanelをそれ自体に直接追加するだけです

于 2013-02-08T19:47:37.990 に答える
1

最初に、コンポーネントを ContentPane に追加する必要があります。Swing では、によって表示されるすべての非メニュー コンポーネントJFrameは ContentPane にある必要があります。

mainframe.getContentPane().add(new MainMenuPanel()); 

編集: コンテンツ ペインについて間違っていました。@MadProgrammer のコメントを参照してください。

次に、MainMenuPanel で作成した JPanel を MainMenuPanel インスタンス自体に追加する必要があります。

add(mainmenupanel);

ただし、おそらくその中間コンテナー自体を取り除き、ラベルを MainMenuPanel インスタンス自体に追加する必要があります。

add(label1);
add(btnNewGame);
于 2013-02-08T19:40:35.713 に答える