在paintComponent()中调用repaint()会占用过多的CPU



嗨,最近我想用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&特性= youtu.be

在那个视频中,当我滚动的时候我必须点击选项/值来重新绘制滚动条

repaint(pane.getViewport().getViewRect());导致paintComponent被调用,一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍又一遍....

我想你明白了…

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

看一下修改外观和感觉

相关内容

  • 没有找到相关文章

最新更新