這很容易測試你自己。只需在非活動面板的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);
}
}
}
謝謝:)這回答我的問題,不知道爲什麼我沒有想到在這之前的:) – user2407444