Archief - [PROG][JAVA] GUI op een overzichtelijke manier aanpakken

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JensDT42

Legacy Member
Tot zover heb ik geen ervaring met GUIs in Java, maar een nieuw hobby-project dwingt me er toe. Na wat opzoekingswerk blijf ik toch met enkele vragen zitten, vooral om de leesbaarheid/uitbreidbaarheid van m'n code te vergroten. Eigenlijk ben ik nog niet zo goed uit over hoe concreet een GUI moet aangepakt worden.

Momenteel heb ik zoiets:
1 JFrame (welja, een klasse die JFrame extend), en per verschillend 'venster' laad ik een nieuwe JPanel, dus een andere subklasse van JPanel per venster. In die subklasse laad ik dan de buttons, labels, etc...

Bijvoorbeeld, neem dat er bij het openen van het programma een JPanel getoond wordt met verschillende knoppen, die verwijzen naar verschillende onderdelen van het programma (en voor de eenvoud van de discussie wil ik niet dat deze in een apart venster geopend worden). De 'actionListener' van die buttons (dus deze die een verandering van 'panel' veroorzaken) is mijn JFrame klasse. Andere buttons (om bijvoorbeeld waarden in een tekstveld te wissen) hebben die panel-subklasse als actionListener.

Is dit nu een goede manier of njet? Zonee, kan je me in de juiste richting wijzen? Ik zou trouwens het gebruik van grafische tools om de GUI aan te maken zoveel mogelijk willen beperken, omdat sommige van de GUI elementen dynamisch zijn adhv gegevens in een DB, en dan vind ik het nogal ambetant om wijs te raken uit die voorgegenereerde code van die tools.

F0rCe

Legacy Member
als je met verschillende JPanel's wilt werken zou ik met een CardLayout werken, dit maakt het mogenlijk om van JPanel te switchen binnen je JFrame.

ook een tip als je dit nog niet wist: probeer zoveel mogelijk of enkel gebruik te maken van Swing components, deze zijn platform onafhankelijk in tegenstelling tot de AWT components :)

je kan ook met een GUI editor werken voor java is de beste ( vind ik ) Netbeans 6.0 in het begin is het beetje moeilijk om er wijs uit te geraken hoe alles werkt maar dat leer je snel genoeg denk ik :-)

moest je nog vragen hebben mag je me altijd een PM sturen

Bavo aka Joske

Legacy Member
Bedenk vooral dat je niet steeds hoeft te extends van JComponent of subklasses (JPanel, JFrame etc) om ze te gebruiken. Je kan ook gewoon instantieren en componeten toe voegen. In feite mag je enkel extenden als je van plan bent iets drastisch te doen zoals paint() te overriden, om zelf te tekenen. Anders gebruik je een instantie en voeg je toe met instantie.getContentPane().add(...)

Hoe je listeners bindt is uw eigen zaak, er zijn drie gangbare wijzes (inner adapter, anomynous, implement). Weet wel dat er zaken bestaan als Action in Swing om bepaalde UI acties beter te encapsuleren.

Uw grootste probleem is databinding, hoe je data uit 'het model' (jouw back-end, jouw logic, ...) bindt aan de UI componenten. Hoe en wanneer je daarvoor synchronisatie verzorgt (neem dat model zich aanpast, moet de gebruiker de nieuwe waarde metene zien? als de gebruiker het aanpast, wanneer zet je dat op he tmodel?). Databinding is een large topic.
Wat in elk geval nooit mag, is dat uw data zelf rechtsreeks de UI aanspreekt. Laat UI data aanspreken, huo view en model gescheiden dus. Al klinkt dat wat abstract.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan