0

嗨,最近我想用 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

因此,在该视频中,当我滚动时,我必须单击选项/值来重新绘制滚动条。

4

1 回答 1

2

repaint(pane.getViewport().getViewRect());导致,在很长一段paintComponent时间内,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次,一次又一次然后再次....

我认为你说对了...

一个更好的主意是替换滚动窗格 UI 委托。

看看修改外观

于 2013-05-31T00:03:53.770 回答