2

私が直面している問題について誰かが解決策を持っているかどうかを尋ねたかった. 私は、アニメーションを描画するアプリケーションで作業しています。たとえば、オブジェクトが移動するマップです。私の問題は、図面の上に、Jtable、Jlist、および他のコンポーネントも配置されていることです。

私の特定の例では、これらのコンポーネントはすべて、マップを保持する Panel に追加されています。その結果、各コンポーネントは、私の fps と同じくらい頻繁に再描画されます。したがって、テーブルの 1 つを非表示にすると、すでに高い CPU 使用率が約 50% から 30% 未満になることがあります。

私の質問は、「背景」(マップ)がメニューを白くすることなく、やや静的なビジュアルコンテンツのpaintComponent()メソッドを呼び出さないようにするにはどうすればよいかということです。

アニメーションは永続的に再描画されるため、メニューが対応する JPanel から分離されている場合、メニューはまったく表示されません。

最初の考えは次の方向に進みます。

クリッピング - メニュー内を移動できるようにしたいので、実際には私が望むほど良くはありません。JLayeredPane - すでに試してみましたが、メニューの paintComponent メソッドがまだ頻繁に呼び出されることが判明したようです。JWindow/Internal Frame - 数分前に考えたことがあります。完全に独立したコンテナを持つことで、私の意見を処理できるようになるか、それとも?

誰かがエレガントなアイデアを持っている場合、それを修正してCPU使用率を大幅に削減する方法を楽しみにしています。

ありがとう!!よろしくお願いします。

4

2 に答える 2

3

塗り重ねる場合は、こちらをJComponent(s)ご覧JPanelください

  1. JXLayer(Java6)に基づくJLayer (Java7)

  2. GlassPane、すべてJComponents軽量でなければならないことに注意しGlassPaneてください。(J)Components

  3. JViewportへのペイントが可能です。

編集

  1. アイコンJLabel内)を移動するにはSwing Timerを使用する必要があります、または、プレーンを使用しないで使用しないでくださいJXLayerGlassPaneJViewportRunnable#ThreadThread.sleep(int)
于 2012-08-31T11:57:38.380 に答える
3

クリップのカスタム形状を作成します。Area クラスを使用して、Area からすべての子コンポーネントの境界を減算します。

于 2012-08-31T11:58:18.660 に答える