我创建了JLabel
作为图片,并将其添加到JScrollPane
,然后添加到我的JFrame
。
接下来,我在paint()
中覆盖了JFrame
方法,并使用drawLine()
方法绘制了4条线(它们看起来像一个框架)。
现在当我滚动时,我的线条会消失,而它们不会repaint()
。只有当我做了最小化,最大化等动作时,我才能看到它们。
使用repaint()
后如何强制ScrollPane
?
答案 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");
}
}