1

JPanel を JScrollPane にラップしており、四角形を常に同じ位置に描画したい = スクロールバーで移動しても四角形の可視性には影響しません。

次のコードを試しました:

    public void paintComponent(Graphics g) {
        g.setColor(Color.red);
        g.drawRect(50, (int)getVisibleRect().getY(), 20 , 20);
    }

ただし、JPanel全体のサイズが変更された場合にのみ、長方形を再描画します。

4

3 に答える 3

2

多分このようなもの:

import java.awt.*;
import javax.swing.*;

public class ScrollPanePaint extends JFrame
{
    public ScrollPanePaint()
    {
        JPanel panel = new JPanel();
        panel.setOpaque( false );
        panel.setPreferredSize( new Dimension(400, 400) );

        JViewport viewport = new JViewport()
        {
            public void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                g.setColor( Color.BLUE );
                g.drawArc( 100, 100, 80, 80, 0, 360);
            }
        };

        viewport.setView( panel );
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setViewport( viewport );
        scrollPane.setPreferredSize( new Dimension(300, 300) );
        getContentPane().add( scrollPane );
    }

    public static void main(String[] args)
    {
        JFrame frame = new ScrollPanePaint();
        frame.setDefaultCloseOperation( DISPOSE_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
     }
}
于 2010-05-17T03:33:04.060 に答える
2

IIRC は、JScrollPaneスクロールによる再描画の量を最小限に抑えようとするため、常にコンポーネントが更新されるわけではありません。

標準的な手法は、 を使用することJLayeredPaneです。あなたを下のレイヤーに追加JScrollPaneし、その上に不透明でないガラス パネル コンポーネントを追加します。Swing チュートリアルのレイヤード ペインの使用方法を参照してください。

于 2010-05-17T02:20:40.947 に答える
0

方法を試すsetLocation。詳細については、 setLocationを参照してください。

于 2010-05-17T02:20:02.707 に答える