3 klasy i ich obiekty

0

Witam. Mam taki proble mz którym walcze kilka h i poradzic sobie niemoge. Mam taki kod(wersja skrócona)

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

class OknoDodaj extends JFrame
{
   	public OknoDodaj()
	{
                
		....
	}
}

class Listener_Dodaj
{
    String osoba;    
    
    ActionListener dodaj = new ActionListener()
    {
        public void actionPerformed(ActionEvent zdarzenie)
        {
            ......
        }
    };
}

class RamkaDodaj extends JFrame
{
   	Container zawartoscOknoDodaj;

	public RamkaDodaj()
	{
		.......
	}
}

Problem polega na tym, że niepotrafie stworzyć obiektów dla tych klas. Chciałbym uzyskac taki efekt, aby klasa

RamkaDodaj widziała klase OknoDodaj
OknoDodaj widziała klase Listenery_Dodaj
Listenery_Dodaj widziała klasy OknoDodaj i RamkaDodaj;

Próbowałem to zrobic

OknoDodaj oknododaj = new OknoDodaj(); (i tak dla wszystkich obiektów). Kompilowało sie ale po uruchomieniu wysypywao sie sporo komunikatów.

run:
Exception in thread "main" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Win32GraphicsConfig.java:295)
at java.awt.Window.init(Window.java:284)
at java.awt.Window.<init>(Window.java:318)
at java.awt.Frame.<init>(Frame.java:419)
i tu zkilkadziesiat linijek

próbowałem tez np. w klasie OknoDodaj

Listenery_Dodaj listenery_dodaj;

public oknoDodaj(Listenery_Dodaj listenery_dodaj)
{
this.listenery_dodaj = listenery_dodaj;
........
}

tylko potem chcac stworzyc obiekt klasy OknoDodaj w klasie RamkDodaj kodem

OknoDodaj oknododaj = new OknoDodaj(???);

i w miejce ??? trzeba podac jakies argumenty, ale nie wiem za bardzo jakie, bo konstruktor OknoDodaj jako parametr ma Listenera a klasa RamkaDodaj obiektów Listenery_Dodaj widziec nie musi.

Jak widzicie próbowałem na różne sposoby. Możecie mi pomóc i powiedziec jak mam osiągnąć swój cel?

0

no to Toje piewrsze rozw. to raczej logicznie, że spowodowało przepełnienie stosu, rekurencji sie nie zauważyło, co? ;)

Co rozumiesz przez 'widzenie' się tych klas?? to, że maja posiadać atrubuty będące obiektami tych pozostałych?? Wyraź to jaśniej troche...jakiś diagram UML'a może?? ale z tego co rozumiem to...lepiej inaczej ten program zaprojektuj...

a jezeli chcesz to zostawić, to ja to widze tak:

class Ramka{
	Okno okno;
public Ramka(Okno okno){
	System.out.println("Ramka");
	this.okno=okno;
}	
}
class Okno{
	Listenery lis=null;
public Okno(){
	System.out.println("Okno");
}
public void getListenery(Listenery lis){
	this.lis=lis;
}
}

class Listenery{
	Ramka ramka;
	Okno okno;
public Listenery(Ramka ramka){
	System.out.println("Lis");
	this.ramka=ramka;
	this.okno=ramka.okno;
}	
}

public class Nowy{	
	public static void main(String []args){
		Okno ok1=new Okno();
		Ramka ram1=new Ramka(ok1);
		Listenery lis1=new Listenery(ram1);
		ok1.getListenery(lis1);
	}
}
0

Shimmi próbuje ale cos mi nie idzie. Masz tu cały kod z zaznaczonymi fragmentami kodu gdzie sa potrzebne obiekty. Mozesz mi to zrobić bo ja cały dzionek zmarnowałem i nic nie udało mi sie zrobic. Najlepiej zeby niebyło innych klas i innych funkcji.

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

class OknoDodaj extends JFrame
{
	JTextField osobaDodaj;
	JButton ok;

	JPanel panel;
	Box poziom1;
	Box poziom2;
	public OknoDodaj()
	{
		poziom1 = Box.createHorizontalBox();
		poziom2 = Box.createHorizontalBox();
		panel = new JPanel();
		panel.setLayout(new BorderLayout());
		osobaDodaj = new JTextField();
		ok = new JButton("OK");
		poziom1.add(Box.createVerticalStrut(20));
		poziom1.add(osobaDodaj);
		poziom2.add(Box.createHorizontalStrut(60));
		poziom2.add(ok);
		poziom2.add(Box.createVerticalStrut(10));
		panel.add(poziom1,BorderLayout.NORTH);
		panel.add(poziom2,BorderLayout.CENTER);
                //ok.addActionListener(listenerdodaj.dodaj);// tu jest potrzebny obiekt klasy Listener_Dodaj
	}
}

class Listener_Dodaj
{
    String osoba;    
    public Listener_Dodaj()
    {
    }
    ActionListener dodaj = new ActionListener()
    {
        public void actionPerformed(ActionEvent zdarzenie)
        {
            
            System.out.println("Wcisnieto buttona");
            ramkadodaj.setVisible(false);//tu jest potrzebny obiekt klasy RamkaDodaj
            osoba = oknododaj.osobaDodaj.getText().trim();//tu jest potrzebny obiekt klasy OknoDodaj
        }
    };
}

class RamkaDodaj extends JFrame
{   
   	Container zawartoscOknoDodaj;

	public RamkaDodaj()
	{
		zawartoscOknoDodaj = getContentPane();
		setSize(180,100);
		setTitle("dodaj");
		zawartoscOknoDodaj.add(oknododaj.panel);//tu jest potrzebny obietk           klasy OknoDodaj
		setResizable(false);
	}
}

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