5

私のアプリでは、カードの大きなリストを表示するためのポップアップダイアログを表示します。サブクラスの多くのJLabelコンポーネントで画像として表示します。JPanel次に、そのオブジェクトをに入れてJScrollPane、カードを水平方向にスクロールできるようにします。

未使用のスペースを透明にし、背景を暗くして、背後にあるものが無効になっていることを示します。以前setBackground(new Color(50, 50, 50, 200))は希望の外観を実現していましたが、背後のコンテンツが再描画されないため、アーティファクトが発生します。

外観は次のとおりです。

スクロール時のアーティファクト

これを修正するにはどうすればよいですか?スクロールしたときに、背後にあるコンテンツを再描画するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

6

瞬間の方程式からウィンドウを取り出します。

にはコンテンツがJScrollPane含まJViewportれています。したがって、コンテンツペインを透明に設定し、ビューポートを透明に設定してから、スクロールペインを透明に設定する必要があります。

setOpaque(false)これは、これらの各コンテナーで使用することで実現できます。

これにより、再ペイントマネージャーが背景をペイントするようになります。

次の問題は、Swingが実際には「半透明」コンポーネント(つまり、不透明または透明)をサポートしていないことです。

これは、メインコンポーネントのメソッドをオーバーライドすることで実装できpaintComponentます(ビューポートのメソッドで十分です)。

于 2013-03-15T01:06:27.483 に答える
1

次のことを試してください...スクロール中に多少の安心感が得られるかもしれません。メインフレームが最大化または復元されたときにも問題が発生する可能性があります。これらのイベントのリスナーと同様の修正が必要になります。

    jScrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
        @Override
        public void adjustmentValueChanged(final AdjustmentEvent e) {
            sevenWondersframe.repaint();
        }
    });
    jScrollPane.getHorizontalScrollBar().addAdjustmentListener(new AdjustmentListener() {
        @Override
        public void adjustmentValueChanged(final AdjustmentEvent e) {
            sevenWondersframe.repaint();
        }
    });
于 2013-03-15T01:54:57.847 に答える