У меня возникла проблема с перерисовкой JPanel внутри JScrollPane.Мерцание при перерисовке JPanel внутри JScrollPane
В принципе, я просто пытаюсь «обернуть» существующую EditPanel (она первоначально расширила JPanel) в JScrollPane.
Кажется, что JPanel обновляется слишком часто (массовое мерцание). Как я могу остановить это? Я попытался использовать setIgnoreRepaint(), но он ничего не делал.
Будет ли эта текущая реализация работать или мне нужно создать другой внутренний класс для точной настройки JPanel, который я использую для отображения графики?
Скелет код:
public class MyProgram extends JFrame{
public MyProgram(){
super();
add(new EditPanel());
pack();
}
private class EditPanel extends JScrollPane{
private JPanel graphicsPanel;
public EditPanel(){
///EDIT, sorry, should have mentioned this was here before
super();
graphicsPanel = new JPanel();
this.setViewportView(graphicsPanel);
//END EDIT
}
public void paintComponent(Graphics g){
graphicsPanel.revalidate(); //update the scrollpane to current panel size
repaint();
Graphics g2 = graphicsPanel.getGraphics();
g2.drawImage(imageToDraw, 0, 0, null);
}
}
}
Спасибо за объяснение, почему он не работает. Первоначально я использовал EditPanel, расширяя JFrame, но поскольку я создавал несколько экземпляров, и каждый из них был в JScrollPane, я решил, что было бы более компактно интегрировать JScrollPane в объект. Я вернусь к расширению JFrame. – pR0Ps