2013-08-09 4 views
0

Я заметил, что когда я использую paintComponent в java, если я использую System.out.println();, все будет распечатываться 2, 3, а иногда и 4 раза. Я знаю, что когда вы используете extends JPanel, он будет автоматически вызван, но почему более одного раза.Почему эта распечатка дважды?

Вот несколько примеров, чтобы попробовать себя.

import javax.swing.*; 
import java.awt.*; 

public class stack extends JPanel{ 
public stack(){ 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.add(this); 
    frame.setLocationRelativeTo(null); 
    frame.setSize(200, 200); 
    } 
public static void main(String args[]){ 
    stack s = new stack(); 
    } 
public void paintComponent(Graphics g){ 
    super.paintComponents(g); 
    g.drawString("Thank You!", 100, 100); 
    System.out.println("Why?"); 
} 
} 
+5

Он вызывается каждый раз, когда компонент «перекрашивается», например. для изменения рамки ... – Reimeus

+0

Оххх, спасибо –

+0

@ DilanHanrahan Если бы мой ответ помог вам принять? –

ответ

2

System.out.println вызывается один раз - но ваш метод может быть вызван повторно. Каждый раз, когда paintComponent называется, он печатает Why?.

Этот метод вызывается несколько раз, т. Е. Для изменения размера кадра или такого, и, в свою очередь, кажется, что sysout выполняется более одного раза.

Смежные вопросы