嗨,最近我想用 Java 制作自己的界面并且讨厌 Windows 滚动条(我正在添加一个 JList)。所以我决定模仿 Facebook 的滚动条(因为我遇到了这个问题还没有完成)。
所以问题基本上是标题。因此,当我在paintComponent() 中调用repaint() 时,我几乎看到我的CPU 使用率在一个简单的界面上猛增。但我发现有必要这样做,否则我的滚动条不会被重绘。
我的 CPU 是 i7 3770,程序使用了 15%,这不是很多,但对于它的作用来说却是很多。但是当我不调用 repaint() 时,它使用大约 1%,这就是我想要的。
所以这是我的paintComponent() 代码:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (pane.getViewport().getViewRect().getSize().equals(getSize())) return;
double percentageScrolled = (double) pane.getVerticalScrollBar().getValue() / (pane.getVerticalScrollBar().getMaximum() - pane.getVerticalScrollBar().getModel().getExtent());
int x = pane.getBounds().width - 11, y = pane.getViewport().getViewPosition().y + 3 + ((int) ((pane.getBounds().height - SCROLL_BAR.getHeight(null) - 9) * percentageScrolled));
repaint(pane.getViewport().getViewRect());
g.drawImage(SCROLL_BAR, x, y, null);
}
下面是一个视频的链接,当我不调用 repaint() 时会发生什么
https://www.youtube.com/watch?v=OMXVB7REFHk&feature=youtu.be
因此,在该视频中,当我滚动时,我必须单击选项/值来重新绘制滚动条。