Dwukrotne wywolanie metody

0

Witam. Dlaczego metoda paintComponent zostaje 2 razy wykonana gry włączam program?

package Main;

import java.awt.Dimension;

import javax.swing.JFrame;

public class Window {

	public static void main(String[] args) {
		
		
		new Window();
	}
	
public Window() {
	JFrame frame = new JFrame("image");
	frame.setPreferredSize(new Dimension(300, 300));
	
	frame.pack();
	frame.setVisible(true);
	
	
	Canvas test = new Canvas();
	frame.add(test);

	
}	}

package Main;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;

public class Canvas extends JComponent{
@Override
protected void paintComponent(Graphics g) {
	// TODO Auto-generated method stub
	super.paintComponent(g);
	
	
	g.setColor(Color.black);
	g.drawLine(10, 20, 30, 40);
	System.out.println("test");
}
}



Konsola oczywiście wyrzuca dwukrotnie "test" zamiast raz.

2

Niewłaściwie inicjalizujesz swoją ramkę - Twoje "płótno" powinieneś dodać i utworzyć przed wywołaniem metody pack(). Możliwe, że to właśnie powoduje, że paintComponent() wykonuje się dwukrotnie, choć ilością wywołań tej metody bym się aż tak nie przejmował. Swing będzie sobie odmalowywał rzeczy wtedy, kiedy mu to jest potrzebne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1