Почему обновление paintComponent каждый раз, когда я изменяю размер окна?Изменение размера окна вызывает paintComponent каждый раз при изменении размера окна?
Это класс, который я добавляю к JPanel, который добавляет JFrame. Является ли объект вызываемым каждый раз, когда окно изменено или что происходит с компонентом краски?
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Random;
import javax.swing.JComponent;
import javax.swing.JPanel;
class DrawString extends JPanel {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
Font font = new Font("Serif", Font.PLAIN, 10);
g2.setFont(font);
g2.drawString("Test string",randInt(1,1000), randInt(1, 1000));
for(int i = 0; i < 100; i++) {
g.setColor(new Color(randInt(1,255), randInt(1,255),randInt(1,255)));
g.drawLine(randInt(1,1000), randInt(1,1000), randInt(1,1000), randInt(1,1000));
}
}
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
super.setBackground(new Color(100,100,100));
paint(g);
}
public static int randInt(int min, int max) {
// Usually this can be a field rather than a method variable
Random rand = new Random();
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}
}
Когда окно изменяет размер, вызывается 'paintComponent()', чтобы дать окну изменения для адаптации к его новому размеру. Если вы вычисляете что-то каждый кадр, вы должны сделать это в отдельном методе, который вы вызываете, прежде чем вы вызовете 'repaint()', поэтому, если 'paintComponent()' из-за изменения размера, у вас не будет дополнительного кадра. – 11684
Почему _shouldn't_ 'paintComponent' вызывается при изменении размеров окна? Вы меняете объем пространства для рисования _into_, либо отсекая часть окна, либо добавляя больше места для рисования. Если вы используете диспетчер компоновки, ваши компоненты также, вероятно, будут перемещаться и/или изменять размер с помощью окна, поэтому их также нужно будет рисовать по-разному. –