У меня есть окно с двумя слоями: статический фон и передний план, который содержит движущиеся объекты.Моя идея - нарисовать фон только один раз (потому что он не изменится), поэтому я делаю изменяющуюся панель прозрачной и добавляю ее поверх статического фона.Вот код для этого:
public static void main(String[] args) {
JPanel changingPanel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(100, 100, 100, 100);
}
};
changingPanel.setOpaque(false);
JPanel staticPanel = new JPanel();
staticPanel.setBackground(Color.BLUE);
staticPanel.setLayout(new BorderLayout());
staticPanel.add(changingPanel);
JFrame frame = new JFrame();
frame.add(staticPanel);
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
Этот фрагмент кода дает мне правильное изображение, которое я хочу, но каждый раз, когда я перекрашиваю changingPanel
, staticPanel
также перекрашивается (что явно противвся идея покрасить статическую панель всего один раз).Может кто-нибудь показать мне, что не так?
К вашему сведению Я использую javax.swing.Timer для пересчета и перекрашивания изменяющейся панели 24 раза каждую секунду.