Co wywołuje tę metodę w podanym kodzie?

0

Hej,

Napotkałem ostatnio na taki sposób jak poniżej - rysowania figur na ekranie. Nie rozumiem tutaj jednej rzeczy. Dlaczego metoda Rectangle() jest wywoływana i rysuje na ekranie czerwony prostokąt skoro nie znajduje się ona w konstruktorze? Co ją wywołuje? Jeśli stworzę ramkę w inny sposób - poprzez utworzenie obiektu JFrame i za jego pomocą utworzę ramkę w konstruktorze to metoda Rectangle() się nie wywoła. Dlaczego poniższy sposób z użyciem słowa "this" sprawia, że metoda jest wywoływana?

//Edit; Kod edytowany, teraz jest poprawny :>

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Grap extends JFrame {
	
	Graphics g;
	
	public Grap() {
			
		this.setTitle("remember");
		this.setSize(500, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
	}
	
	public void paint(Graphics g) {
		g.setColor(Color.RED);
		g.fillRect(0, 0, 100, 100);
	}
	
	
	public static void main(String[] args) {
		
	new Grap();
		
}
}
0

Jesli ten kod powyżej pokazuje Ci czerwony prostokąt to znaczy, że masz zepsutą Javę.

0

Eh, faktycznie, zmieniłem nazwę metody na Rectangle i prostokąt się nie pojawia. :)

Metoda miała nazwę paint(). Jednak moje pytanie jest aktualne. Dlaczego metoda paint() się wywołuje gdy ramka jest tworzona jak powyżej? Nie działa ona natomiast gdy ramka jest tworzona obiektem JFrame.

Pozdrawiam.

1

Jeżeli Grap nie dziedziczy po Component i nie jest jakąś częścią (child) okna to będzie wyrysowane. Dziedziczenie po JFrame pewnie załatwia sprawę (ale nie powinno tak się tego załatwiać).
Paint jest wywoływany przez system renderowania i z tego co rozumiem to raczej paintComponent powinno mieć implementacje.

"painting actually begins higher up the class heirarchy, with the paint method (defined by java.awt.Component.) This method will be executed by the painting subsystem whenever you component needs to be rendered"
https://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html

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