Avatar billede aslan Nybegynder
24. juni 2002 - 01:07 Der er 6 kommentarer og
1 løsning

klasser..

Jeg har denne JTabbedpane hvor jeg smider mine klasser ind og de forskellige klasser bruger hinandens metoder på kryds og tværs. Nu er jeg så stødt ind på et problem hvor klassen reservationG skal benytte sig af klassen Opslag's metoder og omvendt, men det kan jeg ikke få den til?Problemet er at den ene klasse skal initilaseres før den anden klasse kan benytter sig af den og omvendt...


public MainFrame() throws IOException
    {
        ImageIcon icon = new ImageIcon("ikon.gif");
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setFont(new Font("Serif", Font.BOLD, 13));



        Gaest g = new Gaest(db);
        Reservation r = new Reservation(db);
        Funktioner f = new Funktioner();
        Værelse v = new Værelse(db);

        checkInd ankomst = new checkInd(v);

        Opslag opslag = new Opslag(r,v,g,db,ankomst);



        ReservationG res  = new ReservationG(r,f,g,opslag,tabbedPane,ankomst);

        GaestG gæst = new GaestG(g,opslag,tabbedPane,res );

        VærelseG vær = new VærelseG(g,v,opslag,tabbedPane);

        tabbedPane.addTab("Gæst", icon, gæst.getContentPane());

        tabbedPane.addTab("Reservation", icon, res.getContentPane());

        tabbedPane.addTab("Værelse",icon,vær.getContentPane());

        tabbedPane.addTab("Opslag",icon,opslag.getContentPane());


        setLayout(new GridLayout(1, 1));

        add(tabbedPane);

        ankomst.setBounds(450,400,170,150);
        ankomst.setTitle("CheckInd");
        ankomst.setResizable(false);
        ankomst.setVisible(false);
    }
Avatar billede lp Nybegynder
24. juni 2002 - 01:20 #1
uden at kunne hjælpe yderligere, må jeg da komme med et simpelt råd ?

du skulle lære at skrive variabelnavne uden brug af ÆØÅ... det er højst sandsyneligt ikke det der er problemet nu, men du kunne opleve problemer på et tidspunkt..... english english english :)
Avatar billede soreno Praktikant
24. juni 2002 - 10:53 #2
du kan sende en reference med til de klasser der skal have adgang til hinanden, eks:
Opslag opslag = new Opslag(r,v,g,db,ankomst, referenceTilReservationG);
ReservationG res  = new ReservationG(r,f,g,opslag,tabbedPane,ankomst, referenceTilOpslag);

men så får du problemet: var det hønen eller ægget der kom først.
Det kan dog løses med:
Opslag opslag = new Opslag(r,v,g,db,ankomst, referenceTilReservationG);
ReservationG res  = new ReservationG(r,f,g,opslag,tabbedPane,ankomst);
res.setReferenceTilOpslag(opslag);

det kræver så at begge klasser har en varibel som du sætter, eks i Opslag:
private ReservationG referenceTilReservationG;
public Opslag(r,v,g,db,ankomst, referenceTilReservationG) //konstruktør
{
..
  this.referenceTilReservationG = referenceTilReservationG;
}

når du så har gjort alt det kan du i respektive klasserne kalde:
referenceTilReservationG.metode(parameter);
og
referenceTilOpslag.metode(parameter);

men, dit problem skyldes svagt design, min løsning gør det meget sværre at fejlfinde og udvide dit program - men det vil virke.
Avatar billede aslan Nybegynder
24. juni 2002 - 11:48 #3
Hvad betyder svagt design og hvordan mener du at jeg kunne have gjort det bedre?
Avatar billede soreno Praktikant
24. juni 2002 - 12:07 #4
du har først opdaget at det er et problem nu (hvor du er i fuld gang med programmeringen), dvs. i designet af dit program har du ikke overvejet grundigt nok hvordan de forskellige klasser skal samarbejde.

jeg ville nok seperere gui fra model, udfra min forstilling om hvad programmet skal gøre, og så lade modellen være en aggregeringsstruktur hvor ejerskabet mellem klasserne er lagt fast (klasserne: reservation, gæst, værelse, osv).
Avatar billede aslan Nybegynder
24. juni 2002 - 12:32 #5
soreno jeg er ikke helt med ...hvor skaber du denne metode:

res.setReferenceTilOpslag(opslag);

jeg får disse fejl:

C:\Program Files\nusphere\apache\htdocs\modelKomponent\MainFrame.java:26: cannot resolve symbol
symbol  : variable referenceTilReservationG 
location: class MainFrame
        Opslag opslag = new Opslag(r,v,g,db,ankomst,referenceTilReservationG);
                                                    ^
C:\Program Files\nusphere\apache\htdocs\modelKomponent\MainFrame.java:30: cannot resolve symbol
symbol  : method setReferenceTilOpslag  (Opslag)
location: class ReservationG
        res.setReferenceTilOpslag(opslag);
          ^
2 errors

Tool completed with exit code 1
Avatar billede soreno Praktikant
24. juni 2002 - 12:47 #6
Opslag opslag = new Opslag(r,v,g,db,ankomst);
ReservationG res  = new ReservationG(r,f,g,opslag,tabbedPane,ankomst, opslag);
opslag.setReferenceTilReservationG(res);

hvor Opslag tilføjes denne attribut og metode:
private ResergationG reservationG;

public void setReferenceTilReservationG(ResergationG reservationG)
{
  this.reservationG = reservationG)
}

og i ReservationG's konstruktør tilføjes, samt en ekstra attribut:
private Opslag opslag;
public ReservationG(r,f,g,opslag,tabbedPane,ankomst, opslag)
{
  //gør hvad den gamle konstruktør gør +
  this.opslag = opslag;
}

nu har du oprette reference mellem klasserne og kan bruge metoderne i klasserne, eks i opdigtet metode i Opslag:
public void beregn()
{
  int sum = reservationG.hentAlleReservationerSummetSammen();
  System.out.println(sum);
}


og samme princip i ReservationG:
public void beregn()
{
  int sum = opslag.hentNogetSomGiverMeningAtHente();
  System.out.println(sum);
}
Avatar billede aslan Nybegynder
24. juni 2002 - 13:28 #7
takker det var lærerigt....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester