如何在一个JFrame中切换到JPanels?

时间:2012-10-26 21:51:00

标签: java jframe jlabel

我正在写一个俄罗斯方块游戏。当应用程序启动Jlabel时,按钮“Play”打开。如何切换到现有Jframe中的其他标签(Board)?

就像这样直接打开游戏..但首先我想使用ButtonPage类来显示一些带有按钮的欢迎屏幕,然后调用游戏。

    public class Tetris extends JFrame {

    public Tetris(){

        // JFrame Properties
        setSize(198, 409);  
        setResizable(false);
        setTitle("Tetris");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

//        ButtonPage buttons = new ButtonPage();
//        add(buttons);
//        buttons.setOpaque(true);

        Board board = new Board(this);
        add(board);
        board.start();

    } // end of constructor 
    public static void main(String[] args){

        Tetris game = new Tetris();
        game.setLocationRelativeTo(null);        
        game.setVisible(true);        
        game.setLayout(null);
    } // end of main

} // end of class

这是ButtonPage类。

public class ButtonPage extends JPanel implements ActionListener{

    JButton buttonPLAY = new JButton();
    JLabel backgroundImage = new JLabel();

    public ButtonPage(){  

        setLayout(null);

        ImageIcon buttonIcon = new ImageIcon(getClass().getResource("PlayButton.png"));
        ImageIcon buttonIconHover = new ImageIcon(getClass().getResource("PlayButtonHover.png"));
        ImageIcon buttonIconClicked = new ImageIcon(getClass().getResource("PlayButtonClicked.png"));
        int buttonHeight = buttonIcon.getIconHeight();
        int buttonWidth = buttonIcon.getIconWidth();


        buttonPLAY.addActionListener(this);
        buttonPLAY.setActionCommand("Play"); 
        buttonPLAY.setIcon(buttonIcon);
        buttonPLAY.setRolloverIcon(buttonIconHover);
        buttonPLAY.setPressedIcon(buttonIconClicked);
        buttonPLAY.setBorderPainted(false);        

        add(buttonPLAY);


        Dimension size2 = getSize();         
        Dimension size = buttonPLAY.getPreferredSize();
        buttonPLAY.setBounds((192 - buttonWidth)/2, 100 ,buttonWidth, buttonHeight);


    }// end of constructor

    @Override
    public void actionPerformed(ActionEvent e) {
        if ("Play".equals(e.getActionCommand())) {

        Tetris game = new Tetris();        
        // opens the window in the middle of the screen
        game.setLocationRelativeTo(null);
        // set the tetris window visible, unless its true - its invisible DUH!
        game.setVisible(true);        
        game.setLayout(null);

        }
    } // end of actionPerformed

}// end of class

使用actionPerformed方法我可以在新的Frame中打开游戏,但我不知道如何切换面板。

提前感谢任何提示!

2 个答案:

答案 0 :(得分:0)

俄罗斯方块来自main,来自actionPerformed()的以下行:

Tetris game = new Tetris();

实现第二个俄罗斯方块,它真的是你想要的吗?

要向框架添加多个面板,一次只能显示一个,请使用CardLayout

答案 1 :(得分:0)