【问题标题】:How to make swing windows switch between content?如何让swing windows在内容之间切换?
【发布时间】:2014-01-04 15:36:04
【问题描述】:

对不起,如果我的标题有点含糊,但我想做的是让一个按钮通向另一个屏幕。我正在制作一个基本游戏,所以会有几个。我目前正在尝试做的是选项屏幕。我找到了一种使用 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);
}

}

【问题讨论】:

    标签: java swing window repaint


    【解决方案1】:

    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");
    

    【讨论】:

    • 是的,这就是我想要的。谢谢。
    • 好的 - 我已经尝试查找如何使用它们,这让我很头疼。我该如何使用它们?我认为我需要一个不可见的“主面板”(这是否重要),我也添加了所有面板。但是如何让它切换面板呢?
    • 你有一个不必要的. - (CardLayout). rootPanel.getLayout();
    • 编辑了最后一行代码。如果您使用匿名内部类,这两行都可以进入动作侦听器。没有问题
    • 您的解决方案有效,但仍会打开新窗口。你知道这是为什么吗?
    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 2021-05-09
    • 2016-03-09
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多