JPanel перекрашивается при изменении размера JFrame, хотя он не скрыт и не изменен
Я тестировал игру, которую я пишу, когда обнаружил, что один из JPanels внутри JSplitPane перекрашивался при изменении размера JFrame, даже если его область не была затемнена и не была изменена.
Хотя логику (точнее, счетчики) никогда не следует помещать в метод paintComponent, она вызывает потенциально серьезные проблемы.
Кто-нибудь сталкивался / заметил это поведение? Я прочитал один из способов предотвращения перекрашивания - использовать RepaintManager.markCompletlyClean(JComponent). Любые предложения / обходные пути, кроме RepaintManager? Это ошибка?
Увидеть ниже:
import java.awt.*;
import javax.swing.*;
class test
{
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JFrame jframe = new JFrame();
jframe.setLocation(100,100);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jpanel1 = new JPanel()
{
final static long serialVersionUID = 0;
int int_repaints = 0;
public void paintComponent(Graphics graphics)
{
System.out.println("repainting jpanel1=" + (int_repaints++));
}
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
};
JPanel jpanel2 = new JPanel()
{
final static long serialVersionUID = 0;
int int_repaints = 0;
public void paintComponent(Graphics graphics)
{
System.out.println("repainting jpanel2=" + (int_repaints++));
}
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
};
JSplitPane jsplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jpanel1,jpanel2);
jframe.setContentPane(jsplitPane);
jframe.pack();
jframe.setVisible(true);
}
});
}
}