Przekazanie obiektu przez słówko this

0

Cześć

Mam problem ze zrozumieniem słówka this w tym konkretnym przykładzie:

g.fillRect(0, 0, this.getWidth(), this.getHeight());

Wiem jak rozumieć to słówko przy konflikcie nazw i przekazywaniu konstruktorów ale tutaj mam problem.
Z tego co zrozumiałem, to jest to przekazanie obiektu danej klasy.
Np. this.getWidth() ustawia mi szerokość taką samą jak szerokość panelu - tutaj nie rozumiem jak się ma przekazanie obiektu danej klasy (instancji) do tego, żeby została pobrana wartość z panelu?
Jak mam rozumieć użycie słówka thisw takich przypadkach?

Poniżej reszta kodu (nie wkleiłem tylko importów, może tam być kilka rzeczy, które są tutaj nie istotne, bo trochę tam testuje):

public class GUI1 extends JPanel implements ActionListener
{
	public void paintComponent(Graphics g)
	{
		g.fillRect(0, 0, this.getWidth(), this.getHeight());
		int czerwony = (int) (Math.random() * 256);
		int zielony = (int) (Math.random() * 256);
		int niebieski = (int) (Math.random() * 256);
		
		Color kolorLosowy = new Color(czerwony, zielony, niebieski);
		g.setColor(kolorLosowy);
		g.fillOval(70, 70, 100, 100);
//		Image obrazek = new ImageIcon("test2.png").getImage();
//		g.drawImage(obrazek, 5, 5, this);
	}
	
	public static void main(String[] args) 
	{

		GUI1 gui1 = new GUI1();
		JFrame ramka = new JFrame();
//		JButton przycisk = new JButton("klik");
		
		ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
//		ramka.getContentPane().add(przycisk);
		
		ramka.setSize(300, 300);
		ramka.setVisible(true);
		ramka.repaint();
		ramka.add(gui1);
		
	}
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		
	}

}
0

Twoja klasa GUI1 dziedziczy po JPanel, który z kolei dziedziczy po JComponent w którym to jest metoda getWidth.

Czyli w praktyce GUI1 ma metodę getWidth. Kod this.getWidth napisany w klasie GUI1 oznacza, że wywołujesz metodę getWidth z obiektu GUI1.
Jak napiszesz super.getWidth wtedy wywołasz tę metodę z Jpanel.

0

Jak dla mnie to w tym przypadku użycie this jest nadmiarowe, bo this.getWidth() da tutaj ten sam wynik co samo getWidth().

Poza tym this.getWidth() to nie przekazanie obecnej instancji, bo przecież wywołujesz metodę na thisie, a nie przekazujesz go wprost.

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