如何使摆动窗口在内容之间切换?

时间:2014-01-04 15:36:05

标签: java swing window repaint

很抱歉,如果我的标题有点模糊,但我正在尝试做的是让按钮通向另一个屏幕。我正在做一个基本的游戏,所以会有几个。我目前正在尝试做的是选项屏幕。我找到了一个使用revalidate(),repaint()和多个面板的基本方法,但每次都打开另一个窗口,看起来效率不高。

这是我的选项屏幕代码,用于处理从主菜单到自身的屏幕更改。

package menu;

import javax.swing.JFrame;
import javax.swing.JPanel;

import main.Window;

public class Options 
{
JPanel pnlMain = Window.pnlMain;
JFrame frame = new main.Window();
    JPanel pnlOptions = new JPanel();

public static Button graphics = new Button("Graphics");

public Options()
{
    Listener listener = new Listener();

    frame.add(pnlOptions);
    frame.remove(pnlMain);
    pnlMain.revalidate();
    pnlMain.repaint();

    pnlMain.setVisible(false);
    pnlOptions.setVisible(true);

    pnlOptions.add(graphics);

    pnlOptions.revalidate();
    pnlOptions.repaint();

    graphics.addActionListener(listener);
}

import javax.swing.JFrame; import javax.swing.JPanel; import main.Window; public class Options { JPanel pnlMain = Window.pnlMain; JFrame frame = new main.Window(); JPanel pnlOptions = new JPanel(); public static Button graphics = new Button("Graphics"); public Options() { Listener listener = new Listener(); frame.add(pnlOptions); frame.remove(pnlMain); pnlMain.revalidate(); pnlMain.repaint(); pnlMain.setVisible(false); pnlOptions.setVisible(true); pnlOptions.add(graphics); pnlOptions.revalidate(); pnlOptions.repaint(); graphics.addActionListener(listener); }

1 个答案:

答案 0 :(得分:5)

CardLayout将帮助切换帧内的内容。 基本上我们在一个框架内切换面板,而不是打开一个新窗口。 希望这就是你的意思

http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

//是根面板必须在那里。必须将所有卡添加到其中

Jpanel rootPanel = new JPanel(new CardLayout()); 

//to add a panel
Jpanel card1= new Jpanel();
rootPanel.add(card1,"NameofFirstPanel");

//to switch to a card, say on a button press
CardLayout cards = (CardLayout)  rootPanel.getLayout();

cards.show(rootPanel,"nameOfFirstPanel");