У меня есть окно с двумя слоями: статический фон и передний план, содержащий движущиеся объекты. Моя идея - нарисовать фон только один раз (потому что он не изменится), поэтому я делаю панель прозрачной и добавляю ее поверх статического фона. Вот код для этого:JFrame, который имеет несколько слоев
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
получает перекрасили, а также (что, очевидно, против всей идеи картины статической панель только один раз). Может кто-нибудь показать мне, что случилось?
FYI Я использую javax.swing.Timer для пересчета и перерисовки панели смены 24 раза в секунду.
да, я согласен, так что не поймите меня – phunehehe