Toon posts:

[Java]Swing is goed voor GUI

Pagina: 1
Acties:

Verwijderd

Topicstarter
De afgelopen dagen heb ik me weer in swing verdiept, dit is een gui lib voor java. Nu had ik al een paar jaar geleden eens naar swing gekeken en wat documentatie doorgenomen, maar het was destijds nogal basic, maw. er waren niet veel mogelijkheden (controls, classes, e.d.) ook was het nogal traag.

Met wat tegenzin begon ik dus aan een refresh van swing, de api bleek sterk uitgebreid te zijn en de documentatie + swing tutorial leiden mij mooi door de gehele api heen. Ik heb eigenlijk nooit meer dan 2 minuten naar iets moeten zoeken (muv waarom je een jframe met code sluit er geen windowclosing event werd gegenereert).

Maar na al dat gelees begon ik een een test applicatie, eerst de gui op papier en daarna met jbuilder slepen en clicken. Dat bleek eerder slepen en typen te zijn :) want die gridbaglayout heeft veel parameters. Maar ja, binnen een paar uur had ik een non functioneel prototype.

Alles draaide goed, de gui was reageerde snel op m'n muisclicks e.d. Daarom ging ik vlug naar de implementatie, dat gedeelte was niet zo interessant voor dit bericht. In iedergeval dat is ook gelukt.

Nu zit ik dus met een functionele applicatie die niet onderdoet voor de normale windows applicatie bijvoorbeeld gemaakt met delphi. Gui reageert snel, code functies worden normaal uitgevoerd, ik heb geen bugs in swing kunnen ontdekken, MV concept is erg handig. Nadat je bekend bent met swing heb je zo een gui in elkaar zitten. De code is erg "schoon" (dat komt waarschijnlijk omdat de tabs aparte jpanels zijn die in aparte classes zitten). Bijvoorbeeld de tab Preset bestaat uit classe Preset (M) en de PresetPanel (V), mooi gescheiden via het MVC principe, ook erg handig als je de applicatie wil converteren naar webapplicatie, je hoeft dan in principe alleen maar de View te veranderen.

Maar waar ik heen wil, je hoort vaak negatieve verhalen over de java gui combinatie bijvoorbeeld swing, maar het is mij in deze testcase erg goed bevallen.

Ik heb overigens gebruik gemaakt van jdk1.4.1 en een snelle computer (2ghz processort, 512 mb ram). Ik kan er wel van uitgaan dat ik dit over een jaar of ander half (als het uiteindelijke systeem klaar is) als minimum systeem kan eisen.

Ik begrijp dat java swing niet bedoeld is voor kleine utilities zoals een cpu watcher, du meter, een explorer vervanger, enzovoorts, omdat deze programma's sterk afhankelijk zijn van het OS en als je dat wilt dan moet je niet bij java zijn. Maar bij normale applicaties die redelijk onafhankelijk zijn van het OS is java (swing) bijna perfect.

Hoe denken jullie hierover?

Een aantal screenshots om te laten zien dat de gui niet onderdoet voor de normale gui van programma's:

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1203/Image2.gif

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1203/Image3.gif

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1203/Image4.gif

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1203/Image5.gif

Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/1203/Image6.gif

  • Johnny
  • Registratie: December 2001
  • Laatst online: 15:50

Johnny

ondergewaardeerde internetguru

Ik heb in het verleden ook wat negatieve ervaringen met Swing gehad, altijd traag en lelijk om te zien, maar toen ik pas bij de voorbeeld programma's van Java 1.4.1 keek (swingdemo) was ik echt onder de indruk.

Ik heb nog geen applicaties er mee gebouwd maar ben zeker van plan dat in de toekomst te gaan doen.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 27-05 10:14

Eelke Spaak

- Vlad -

Swing is inderdaad tegenwoordig een volwaardige tool om GUI's mee te maken. Wanneer je de look&feels van http://www.jgoodies.com/ gebruikt vind ik Swing er zelfs veel mooier uitzien dan de standaard Windows (XP) en MacOS (X) omgevingen.

TheStreme - Share anything with anyone


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
tis best al te gebruiken maar hij is nog altijd deftig traag (als je op een < 600Mhz bak draait).

ook threaded gedoe is erg "tricky", maar genoeg plek opengelaten om er iets mee te doen. Wel is er BAR weinig goede info op het web (typisch sun) en ik raad je aan om een paar boeken ("liggen" wel ergens in digitaal formaat) effe te doorlezen.

ook moet je eens naar eclipse kijken om te zien wat hardware onderstuening kan doen met java ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

hobbit_be schreef op 10 december 2003 @ 17:54:
tis best al te gebruiken maar hij is nog altijd deftig traag (als je op een < 600Mhz bak draait).

ook threaded gedoe is erg "tricky", maar genoeg plek opengelaten om er iets mee te doen.
foxtrot to the rescue
Wel is er BAR weinig goede info op het web (typisch sun) en ik raad je aan om een paar boeken ("liggen" wel ergens in digitaal formaat) effe te doorlezen.
Meestal kom ik er met de javadoc nog wel uit en anders zijn er idd genoeg boeken en tutorials te vinden. Na een tijdje zit je trouwens ook veel beter in Swing en begrijp je ook meer van de opzet.
ook moet je eens naar eclipse kijken om te zien wat hardware onderstuening kan doen met java ;)
Ik heb er even naar gekeken en uiterlijk is erg mooi, maar het progt niet fijn. Java is een taal zonder destructors en bij SWT zal je je objecten toch moeten disposen en dat is iets dat je er dan maar in moet knutselen. Swing progt gelukkig wel fijn, alleen jammer dat het altijd nog kut is om java applicaties te deployen.

Verwijderd

Topicstarter
Swing is inderdaad tegenwoordig een volwaardige tool om GUI's mee te maken. Wanneer je de look&feels van http://www.jgoodies.com/ gebruikt vind ik Swing er zelfs veel mooier uitzien dan de standaard Windows (XP) en MacOS (X) omgevingen.
Die jgoodies look and feel ziet er inderdaad erg goed uit, met name de alignment van tekst in controls zoals jtextarea en jlist zijn verbeterd, ik had zelf als een custom renderer geschreven voor jlist om de text wat van het kantje af te halen, maar dat is nu niet meer nodig. Ik ga eens wat beter naar jgoodies l&f kijken, en nu maar hopen dat het onder een goeie licensie verspreid word :)
ook threaded gedoe is erg "tricky", maar genoeg plek opengelaten om er iets mee te doen. Wel is er BAR weinig goede info op het web (typisch sun) en ik raad je aan om een paar boeken ("liggen" wel ergens in digitaal formaat) effe te doorlezen.
Bedoel je het "probleem" dat je in een non swing event thread geen swing controls direct mag aanspreken? Dat vond ik eerst ook wat raar, maar de sun tutorial legt het best aardig uit dat je invokelater of een andere invoke functie moet gebruiken, dat vond ik niet zo'n probleem eigenlijk.
ook moet je eens naar eclipse kijken om te zien wat hardware onderstuening kan doen met java
Ja daar had ik ook naar gekeken, maar deze techniek is redelijk nieuw als je het vergelijkt met swing, tevens is de documentatie nogal schaars (zelfs de api docs). Ook lijkt het me moeilijk om deze controls uit te breiden, bijvoorbeeld een customcellrenderer te implementeren in de swt versie jtable. Ook de grootte van de hele api viel tegen, je mist redelijk veel functies die je eigenlijk niet kan missen. Laten we hopen dat het kinderziektes zijn en dat het netzoals swing over een paar jaar een stuk beter is.
foxtrot to the rescue
Handig, die kende ik nog niet, ga ik zo eens wat beter naar kijken. Ik gebruikte eerst altijd swingworker, maar later ben ik toch weer overgestapt op handmatig invokelater.
Wel is er BAR weinig goede info op het web (typisch sun) en ik raad je aan om een paar boeken ("liggen" wel ergens in digitaal formaat) effe te doorlezen.
Er is juist erg veel info wat betreft j2se, niet alleen een api docs, maar een compleet online boek die alles duidelijk vertelt en regelmatig word geupdate. Ik heb zelde zo'n goede documentatie gezien. Alleen j2ee is nog niet echt goed gedocumenteer, natuurlijk wel in de api docs, maar een boek is wel handig als je met j2ee aan de slag gaat.

Phew ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Die jgoodies look and feel ziet er inderdaad erg goed uit
Afgezien van zijn tools is zijn manier van programmeren ook erg fijn. Check zijn code maar eens en dan neem je je huidige manier van gui schrijven volledig op de hak. Ik ben trouwens nog een stap verder gegaan dan hij om gui op een andere manier te schrijven. Mijn 'gui'objecten extenden niet meer van een grafisch component maar mogen zelf bepalen wat ze extenden. Ik heb alleen 1 methode nodig: getGui, en deze haalt me een component op dat bij dat object hoort. Je gui valt dan veel minder uit de boot dan als je op de traditionele manier gui progt.
Bedoel je het "probleem" dat je in een non swing event thread geen swing controls direct mag aanspreken? Dat vond ik eerst ook wat raar, maar de sun tutorial legt het best aardig uit dat je invokelater of een andere invoke functie moet gebruiken, dat vond ik niet zo'n probleem eigenlijk.
Met de invoke functies kan je het idd doen, maar niet alle methodes hoef je van de event dispatching thread aan te roepen. (Alhoewel ik uit mijn blote hoofd niet zo weet wat allemaal wel en niet mag omdat ik zelf ook liever die invoke functies gebruik).
Handig, die kende ik nog niet, ga ik zo eens wat beter naar kijken. Ik gebruikte eerst altijd swingworker, maar later ben ik toch weer overgestapt op handmatig invokelater.
Een geweldige api om threads te gebruiken onder swing. Ik ben alleen nog op zoek naar een semi-modal dialog (een dialog die modal is, dwz andere schermen accepteren geen user event maar wel swing events (zoals updates ed).
Er is juist erg veel info wat betreft j2se, niet alleen een api docs, maar een compleet online boek die alles duidelijk vertelt en regelmatig word geupdate. Ik heb zelde zo'n goede documentatie gezien. Alleen j2ee is nog niet echt goed gedocumenteer, natuurlijk wel in de api docs, maar een boek is wel handig als je met j2ee aan de slag gaat.

Phew ;)
Wij (java proggers) zijn verwend ;)

Verwijderd

Topicstarter
Afgezien van zijn tools is zijn manier van programmeren ook erg fijn. Check zijn code maar eens en dan neem je je huidige manier van gui schrijven volledig op de hak. Ik ben trouwens nog een stap verder gegaan dan hij om gui op een andere manier te schrijven. Mijn 'gui'objecten extenden niet meer van een grafisch component maar mogen zelf bepalen wat ze extenden. Ik heb alleen 1 methode nodig: getGui, en deze haalt me een component op dat bij dat object hoort. Je gui valt dan veel minder uit de boot dan als je op de traditionele manier gui progt.
Dat klinkt interessant, maar ik snap het nog niet helemaal, maar misschien kan ik beter eerst de code van jgoodies bekijken.
Een geweldige api om threads te gebruiken onder swing.
Gisteren als een test een bestaande thread geconverteerd naar een job. Ik kon heel wat code weggooien, want ik had al eigen omweggetjes gemaakt zodat de beperkingen van thread niet zo merkbaar waren. Maar dat foxtrot is best aardig, zeker dat het nu blocking threads zijn!
Ik ben alleen nog op zoek naar een semi-modal dialog (een dialog die modal is, dwz andere schermen accepteren geen user event maar wel swing events (zoals updates ed).
Waarschijnlijk heeft foxtrot de oplossing voor jouw, het filtert namelijk bepaalde events, een repaint even laat hij bijvoorbeeld door. Kun je het niet zo aanpassen dat hij bepaalde events van een bepaalde source ook doorlaat?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 12 december 2003 @ 09:55:
[...]
Dat klinkt interessant, maar ik snap het nog niet helemaal, maar misschien kan ik beter eerst de code van jgoodies bekijken.
Hier staat wel iets erover.

[rml][ Alg] GUI refactoring[/rml]/
Gisteren als een test een bestaande thread geconverteerd naar een job. Ik kon heel wat code weggooien, want ik had al eigen omweggetjes gemaakt zodat de beperkingen van thread niet zo merkbaar waren. Maar dat foxtrot is best aardig, zeker dat het nu blocking threads zijn!
Foxtrot zou imho vast in Swing moeten zitten.
Waarschijnlijk heeft foxtrot de oplossing voor jouw, het filtert namelijk bepaalde events, een repaint even laat hij bijvoorbeeld door. Kun je het niet zo aanpassen dat hij bepaalde events van een bepaalde source ook doorlaat?
Ik had er al een normale gemaakt naar aanleiding van een artikel op javaworld, maar helaas werkte dit niet bij foxtrot omdat zij controleren of de actieve eventqueue wel de juiste is.
Pagina: 1