静的な背景と移動するオブジェクトを含む前景の2つのレイヤーを持つウィンドウがあります。私の考えは、背景を1回だけ描画することです(変更されないため)。そこで、変更パネルを透明にして、静的な背景の上に追加します。このためのコードは次のとおりです。
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を使用して、変更するパネルを1秒に24回再計算して再描画しています。