Привет, недавно я хотел создать свой собственный интерфейс на Java и ненавидел полосу прокрутки Windows (я добавлял JList). Поэтому я решил подражать полосам прокрутки Facebook (еще не закончен, так как я столкнулся с этой проблемой).Вызов repaint() в paintComponent() использует слишком много CPU
Таким образом, проблема заключается в основном в названии. Поэтому в значительной степени я видел, как мое использование процессора резко увеличилось для простого интерфейса, когда я назвал repaint() в paintComponent(). Но я обнаружил, что это необходимо сделать, иначе мой полоса прокрутки не будет перерисована.
Мой процессор - 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);
}
и ниже ссылка на видео то, что происходит, когда я не называю перекрасить()
https://www.youtube.com/watch?v=OMXVB7REFHk&feature=youtu.be
Таким образом, в это видео, когда я прокручиваю, мне нужно щелкнуть по параметрам/значениям, чтобы перерисовать полосу прокрутки.
Вы уже перекрашиваете. Вам не нужно просить другую краску, пока вы это делаете. – EJP