使用滚动后如何重画?

时间:2016-06-03 14:37:08

标签: java

我创建了JLabel作为图片,并将其添加到JScrollPane,然后添加到我的JFrame。 接下来,我在paint()中覆盖了JFrame方法,并使用drawLine()方法绘制了4条线(它们看起来像一个框架)。

现在当我滚动时,我的线条会消失,而它们不会repaint()。只有当我做了最小化,最大化等动作时,我才能看到它们。

使用repaint()后如何强制ScrollPane

1 个答案:

答案 0 :(得分:0)

您需要将更改侦听器添加到滚动窗格的视口中。见这个例子:

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

public class Example extends JFrame {

    public Example() {

        PaintedComponent paintedComponent = new PaintedComponent();
        paintedComponent.setPreferredSize(new Dimension(500, 500));

        JScrollPane scrollPane = new JScrollPane(paintedComponent);
        scrollPane.getViewport().addChangeListener(e -> paintedComponent.repaint());

        setContentPane(scrollPane);
        setMaximumSize(new Dimension(300, 300));
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        new Example();
    }
}

class PaintedComponent extends JComponent {
    @Override
    public void paintComponent(Graphics g) {
        // Do your painting here
        System.out.println("Repainted");
    }
}