当前位置: 首页 > 知识库问答 >
问题:

切换JPanels

诸葛卜霸
2023-03-14

所以我正在尝试制作一个basic程序来学习更多关于Java的知识,而我在切换屏幕时遇到了麻烦。我想有一个display类,我可以在其他类中调用它来处理所有的面板等等,然后创建一个类来构建每个面板。我现在尝试做的是使用startmenu类中的一个按钮使用display类中的一个方法从一个面板切换到另一个面板。

以下是StartMenu类中的代码:

public void actionPerformed(ActionEvent e)
{
    display.switchPanel("Start");

}

下面是我的display类:

public class Display 
{

    JFrame frame;

    StartMenu start = new StartMenu();
    MainMenu main = new MainMenu();


    JPanel panel = new JPanel();

    JPanel startPanel = start.createPanel();
    JPanel mainPanel = main.createPanel();


    CardLayout card = new CardLayout();
    BorderLayout border = new BorderLayout();

    public void createDisplay()
    {
        frame = new JFrame("Insert Name");
        frame.setPreferredSize(new Dimension(800,600));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel, BorderLayout.CENTER);

        panel.setLayout(border);
        panel.add(startPanel);
        panel.add(mainPanel);

        mainPanel.setVisible(false);
        startPanel.setVisible(true);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setResizable(false);
    }

    public void switchPanel(String x)
    {
        String p = x;

        if(p.equals("Start"))
        {
            mainPanel.setVisible(true);
            startPanel.setVisible(false);
        }

    }
}

共有1个答案

濮俭
2023-03-14

使用CardLayout,这就是它的设计用途,例如...

public class Display {

    public static final String START_VIEW = "start";
    public static final String MAIN_VIEW = "main";

    JFrame frame;

    StartMenu start = new StartMenu();
    MainMenu main = new MainMenu();

    JPanel panel = new JPanel();

    JPanel startPanel = start.createPanel();
    JPanel mainPanel = main.createPanel();

    CardLayout card = new CardLayout();

    public void createDisplay() {
        frame = new JFrame("Insert Name");
        frame.setPreferredSize(new Dimension(800, 600));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(panel, BorderLayout.CENTER);

        panel.setLayout(card);
        panel.add(startPanel, START_VIEW);
        panel.add(mainPanel, MAIN_VIEW);

        mainPanel.setVisible(false);
        startPanel.setVisible(true);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setResizable(false);
    }

    public void switchPanel(String x) {
        card.show(panel, x);
    }
}

那么你可能会用一些类似...

public void actionPerformed(ActionEvent e)
{
    display.switchPanel(Display.START_VIEW);
}

在视图之间切换

有关更多详细信息,请参阅如何使用CardLayout

 类似资料:
  • 在开头前几章我们曾讲过怎么在Vim里设置选项。 对于布尔选项,我们可以使用set someoption!来"切换"选项。 如果我们能给这个命令创建一个映射,那就再好不过了。 执行下面的命令: :::vim :nnoremap <leader>N :setlocal number!<cr> 在normal模式中按下<leader>N看看。Vim将会在开启和关闭行号显示之间切换。 像这样的"切换"映

  • 本章将讨论jQueryUI视觉效果的toggle()方法。 toggle()方法切换show()或hide()方法,具体取决于元素是否隐藏。 语法 (Syntax) toggle()方法具有以下语法 - .toggle( effect [, options ] [, duration ] [, complete ] ) Sr.No. 参数和描述 1 effect 这是一个String,指示要用于

  • 我已经尝试了android widget开关事件侦听器的答案中的代码,但帖子没有提到我试图使用它时遇到的错误。 在建议代码的第二行: 此错误触发 CompoundButton类型中的方法setOnCheckedChangeListener(CompoundButton. OnCheckedChangeListener)不适用于参数(new OnCheckedChangedListener(){})

  • 问题内容: 我想在CSS之间切换,因此当用户单击按钮()时,它会显示菜单()并更改CSS,而当用户再次单击它时,它将恢复正常。到目前为止,这就是我所拥有的: 有人可以帮忙吗? 问题答案: 对于1.9以下的jQuery版本请参阅https://api.jquery.com/toggle- event 但是,在这种情况下使用类比直接设置CSS更好,请查看提及的addClass和removeClass方

  • 一个可切换的组件实际上是包含了多个组件, 选择渲染其中某个组件的组件. 我们使用对象来将props的值和组件做上映射. import HomePage from './HomePage.jsx'; import AboutPage from './AboutPage.jsx'; import UserPage from './UserPage.jsx'; import FourOhFourPage

  • 简介 如何用yii2-bootstrap自带的组件tabs实现tab切换的功能,今天就用一个简单的实例以及效果演示来告诉大家如果应用tabs这个组件 演示 tab切换效果图 用法 echo Tabs::widget([ 'items' => [ [ 'label' => 'One', 'content' => 'Anim pariatur c