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

Jak*_*ger 0 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);
}
Run Code Online (Sandbox Code Playgroud)

}

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);
}
Run Code Online (Sandbox Code Playgroud)

}

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);
}
Run Code Online (Sandbox Code Playgroud)

}

use*_*058 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");
Run Code Online (Sandbox Code Playgroud)