アプリケーションの描画を最適化しようとしています。現在、アニメーションといくつかの GUI コンポーネントを実装しています。正確に分離されているものもあれば、重なり合っているものもあります。現在、スイング コンポーネントのオーバーラップ内で問題に直面しています。私のアニメーションと重なる GUI の一部は、多くの文字列を描画する必要があります。
その結果、オーバーラップする GUI は、アニメーションが更新されるたびに再描画されます。お互いの前に描かれているものを確認するために、かなり多くの異なる方法を使用してみました。GlassPane、Jlayeredpane など。残念なことに、これらの試行のいずれにおいても、ユーザーが操作するときにのみ呼び出される必要がある重複する Menus paintcomponent メソッドが、アニメーションのために頻繁に呼び出され、CPU 使用率が非常に高くなります。
レイヤーペイン内でメニューを下位に配置しようとしました。つまり、次のようになります。
getLayeredPane().add(map, JLayeredPane.DEFAULT_LAYER);
getLayeredPane().add(mapController, JLayeredPane.PALETTE_LAYER);
getLayeredPane().add(settings, JLayeredPane.PALETTE_LAYER);
getLayeredPane().add(painter, JLayeredPane.POPUP_LAYER);
ペインターのペイントプロセス中に、領域を変更しようとしました-つまり:
@Override
protected void paintComponent(Graphics g) {
g2 = (Graphics2D)g;
g2.setRenderingHints(DefaultResources.getRenderQuality());
g2.clip(JMain.getInstance().getMapBounds());
...}
さて - ペインター コンポーネントが !isOpague(); になるとすぐに その下にあるすべてのコンポーネントが再描画されます。残念ながら、メニューを上位に配置すると、アニメーションの更新で再描画する必要があります。
オーバーラップするコンポーネントとアニメーション化されたコンポーネントの永久的な再描画を回避する方法を知っている人はいますか?
私が見た唯一の解決策は、重量のあるコンテナーを使用することでした。残念ながら、相対的な位置付けは、目的を移動する際の動作も示しており、これは適切ではありません。
アドバイスありがとうございます!!