przypisywanie referencji do zmiennej typu klasy (ktora rozszerza JFrame) ale bez otwierania okna

1

Witam
Chodzi o to, ze mam klase GUI, w ktorej tworze jak nazwa wskazuje interfejs uzytkownika. W niej mam jeden button, ktory ma w actionlistenerze klase anonimowa ActionListener i w nim otwieram sobie inna moją klase, która dziedziczy po JDialog - wiec otwiera sie okienko po kliknieciu.

I chodzi o to, ze chciałbym w klasie rozszerzajacej JDialog miec odniesienie do tej klasy GUI, zebym mogl manipulować w niej czyms, ale jak stworze obiekt przez GUI gui = new GUI(); otwiera sie ponownie całe okno klasy GUI. Chce tego uniknac, ale miec zmienna ktora operuje na właściwosciach tej klasy, jak to zrobic?:D

pewnie pytanie trywialne, ale gdzies sie nauczyc tego trzeba prawda ;)

i jeszcze moze drobna sprawa, w klasie GUI jest JButton ktory ma actionlistenera z klasa anonimową - w niej zaimplementowana jakaś tam metoda z jakiejs tam klasy ktora potrzebuje w argumencie obiekt typu JFrame. GUI dziedziczy po JFrame. I teraz chce jako ten parametr metody dać jakos "referencje do klasy GUI" - jeśli dobrze to nazywam. Jak takie cos zrobic?
(sprawdzalem z "super" albo "this" ale this wskazuje na "tę klase", wiec klase anonimowa ActionListener, a super przeciez bierze konstruktor nadklasy, a ni jak actionlistener po moim gui nie dziedziczy)

Wydaje mi się, ze oba pytania mozna zastapic jednym: jak stworzyc obiekt klasy rozszerzjacej JFrame, ale bez otwierania okienka ponownie?
ale pewien nie jestem to sie rozpisalem ;p

licze na odpowiedzi, dzieki z gory
pozdrawiam!

0

Na tym forum nikt opowieści czytać nie lubi. Pokaż kod.

1

@Wibowit
Czyli w przypadku takim:

public class ScreenWindow extends JDialog
{
	public ScreenWindow(JFrame owner)
	{
	      [...]	
	}
}
 

I klasa GUI:

public class GUI extends JFrame
{
	private JButton button;
	
	public GUI()
	{
		button= new JButton("Zrob zdjecie");
		button.setBounds(10, 50, 150, 50);
		button.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) 
			{
				if(scwin == null)
					scwin = new ScreenWindow(GUI.this); // <<<<< TUTAJ
				scwin.setVisible(true);
			}
			
		});
		add(button);	
	}

to w miejscu TUTAJ, czym różniło by się wpisanie do konstruktora ScreenWindow czegos takiego:

GUI gui = new GUI();

od

GUI.this

? :)

1

A zapominajac o powyzszym przykladzie, mam metode:

public void robieCos(JFrame klasa)
{
[..]
}

i chce jej podac jakis argument, to czym różniłoby się wpisanie przykładowo:

robieCos(new JFrame());

od zrobienia czegos takiego:

JFrame ramka = new JFrame();
robieCos(ramka); 

Zapewne pytanie proste, ale chcialbym wiedziec jakie sa różnice. I to nie takie podane w 2 słowach, tylko z jakims przykładem, co dlaczego :)

0

o_O No rózni się tym że w pierwszym przypadku poza tą funkcją robieCos() nie masz już dostępu do obiektu który stworzyłeś a w drugim przypadku masz i możesz go wysłać do 10 innych funkcji a potem pomalować na różowo i wstawić jednorożca.

1

mam jeszcze jeden mały problem, może ktoś mi w tym temacie odpowie ;p
chce w JDialog wyswietlić obrazek, ale JDialog nie ma metody paintComponent, jak to zrobic?
probowalem zrobic swoja metode paint(Graphics2D g) ale nie do konca wiem jak ja wykorzystac

0

Utworzyć JPanel i potem dodac go w JDialogu

1

tak tez pomyslalem i tak robilem ;) wybaczcie ze nie powiadomilem na forum

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