很抱歉,如果我的标题有点模糊,但我正在尝试做的是让按钮通向另一个屏幕。我正在做一个基本的游戏,所以会有几个。我目前正在尝试做的是选项屏幕。我找到了一个使用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);
}
答案 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");