java - 切换 JPanel

标签 java awt

所以我正在尝试制作一个基本程序来学习更多关于 java 的知识,但我在切换屏幕时遇到了麻烦。我想要一个显示类,我可以在其他类中调用它来处理所有面板等,然后创建一个类来构建每个面板。我现在想做的是使用我的开始菜单类中的按钮,使用显示类中的方法从一个面板更改为另一个面板。

这是 startmenu 类中的代码:

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

}

这是我的显示类:

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

    }
}

最佳答案

使用 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);
}

在 View 之间切换

参见 How to Use CardLayout了解更多详情

关于java - 切换 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33662879/

相关文章:

c# - C# 使用和 Java 导入之间的区别

线程中的java异常 "AWT-EventQueue-0"

java - AWT-EventQueue-0

java - 如何删除链表中的特定节点

java - 使用 dropbox core api 和 android 下载文本文件

java - 使用 CMD 作为进程

java - TimerTask 是否在新线程中执行

Java,将 GUI 与 ActionListener 类分开

java - 如何用 Java 制作 3D 图形?

java - 根据数值对 Map 的字符串键进行排序