Java CardLayout事件

Java CardLayout事件,java,Java,我最近一直在做一些游戏编程,我使用卡片布局在不同的屏幕之间切换(主菜单、游戏屏幕、游戏结束等) 我的问题是,每次我切换屏幕时,前一个屏幕是否变为“非活动”,比如说我从画布切换到主菜单,pain()、painComponent()和游戏勾号等方法是否仍在被调用,或者画布是否“非活动:=” 换句话说,当我切换时,我必须手动停止游戏,或者CardLayout已经停止了吗?这很容易由您自己测试。只需在非活动面板的paintComponent方法中放入一条日志语句,然后查看它是否在卡未显示时打印 此代码显

我最近一直在做一些游戏编程,我使用卡片布局在不同的屏幕之间切换(主菜单、游戏屏幕、游戏结束等)

我的问题是,每次我切换屏幕时,前一个屏幕是否变为“非活动”,比如说我从画布切换到主菜单,pain()、painComponent()和游戏勾号等方法是否仍在被调用,或者画布是否“非活动:=”


换句话说,当我切换时,我必须手动停止游戏,或者CardLayout已经停止了吗?

这很容易由您自己测试。只需在非活动面板的paintComponent方法中放入一条日志语句,然后查看它是否在卡未显示时打印

此代码显示它仅在第一个面板上调用paintComponent:

package com.sandbox;

import javax.swing.*;
import java.awt.*;

public class SwingSandbox {

    public static void main(String[] args) {

        JFrame frame = buildFrame();
        JPanel cards = new JPanel(new CardLayout());

        cards.add(new JPanelThatPrints("1"));
        cards.add(new JPanelThatPrints("2"));
        cards.add(new JPanelThatPrints("3"));

        frame.add(cards);
    }


    private static JFrame buildFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setVisible(true);
        return frame;
    }


    private static class JPanelThatPrints extends JPanel {

        private String message;

        public JPanelThatPrints(String message) {
            this.message = message;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            System.out.println(message);
        }
    }
}
谢谢:)这回答了我的问题,我不知道为什么我以前没有想过:)