[Java]Een class met swingelementen extenden. Of juist niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Elvis
  • Registratie: Juli 2002
  • Laatst online: 18-11-2017

Elvis

Echo Lima Victor India Sierra

Topicstarter
Eén goede avond, beste Tweakers!

Ik heb een progje.
De main class GUI heeft een JTabbedPane, waar doormiddel van een aantal knoppen tabs aan kunnen toegevoegd worden.

Java:
1
2
3
4
5
newWOButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        tabPane.addTab("xxxxxxxxx - xxxxxxxxxx", new WOTab());
    }
});


Zoals je uit het lapje code hierboven misschien kan herleiden, zijn de tabs aparte classes die JPanel extenden.
In totaal zouden er 3 verschillende "tab-classes" zijn, die naargelang meer/minder/andere informatie gaan bevatten.

Effe een voorbeeld:

Afbeeldingslocatie: http://s6.tinypic.com/34o3uza_th.jpgAfbeeldingslocatie: http://i45.tinypic.com/zugn60_th.jpg*klik*

De class WOTab.java maakt de tab aan de linkerkant. De class ScarletTab.java maakt de tab aan de rechterkant.

Momenteel extend de class ScarletTab, WOTab en override de methode om het onderste deel JTextFields op te maken. Maar om dat te doen, is het nodig om al die textfields bij de declaratie in WOTab public te maken. En net dát zit me niet helemaal lekker, omdat me altijd geleerd is om zoveel mogelijk velden in een class private te houden.

Heeft iemand misschien een idee over hoe ik dit beter kan aanpakken?

[ Voor 48% gewijzigd door Elvis op 19-12-2009 22:38 ]

[GoT] TF2 Clan


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Ik snap niet helemaal waarom je alle textfields public zou moeten maken, maar er zijn in elk geval twee alternatieven:

Ten eerste zijn er tussen public en private nog de protected en 'default' toegangsniveaus...
Ten tweede zou je kunnen overwegen om de boel iets meer op te splitsen in herbruikbare panels en daarmee de twee tabs samen te stellen (composition in plaats van inheritance).

[ Voor 30% gewijzigd door Herko_ter_Horst op 19-12-2009 23:16 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Elvis
  • Registratie: Juli 2002
  • Laatst online: 18-11-2017

Elvis

Echo Lima Victor India Sierra

Topicstarter
Herko_ter_Horst schreef op zaterdag 19 december 2009 @ 23:10:
Ik snap niet helemaal waarom je alle textfields public zou moeten maken, maar er zijn in elk geval twee alternatieven:

Ten eerste zijn er tussen public en private nog de protected en 'default' toegangsniveaus...
Ten tweede zou je kunnen overwegen om de boel iets meer op te splitsen in herbruikbare panels en daarmee de twee tabs samen te stellen (composition in plaats van inheritance).
Men heeft mij altijd gezegd alles zoveel mogelijk private te maken, tenzij er een goede reden is om dat niet te doen. De JTextFields die gedeclareerd worden in WOTab zouden op zn minst protected (jaja, heb ik opgezocht ;) ) gemaakt moeten worden als ik zou willen plaatsen vanuit ScarletTab.

Verder heb ik ook bijgelezen over composition vs. inheritance en hoewel ik nog een beetje twijfel(de), heb ik nu toch gekozen voor composition.
Het bovenste 2/3e van ScarletTab word nu gemaakt door protected methods uit WOTab en het onderste deel gewoon door een methode in ScarletTab zelf.

Als het programma vordert zal het uit zichzelf wel aanwijzen of het nu de goede oplossing is. :)

[GoT] TF2 Clan