[JAVA] Swing componenten en oude AWT componenten

Pagina: 1
Acties:

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Topicstarter
Ik zal mijn probleem kort uitleggen. Als er meer vragen zijn, roep ze dan maar.
Voor een opdracht voor 'school' moet ik een applicatie schrijven in Java die totaal crossplatform is, dus moet draaien op alle Windows machines, Linux en SUn bakken.
Dat is niet zo'n probleem. De belangrijkste functionaliteit die het moet hebben is dat het functies kan tekenen, evalueren etc. De hele mikmak, omdat zelf te programmeren ben je al snel wat maanden verder. Dus gezocht op het internet en een 'toolset' met parsers voor functies, objecten die functies representeren, tabellen en grafische classes om dingen te tekenen.
Helaas is die code al een jaar of 2 oud en maakt dus gebruik van de oude AWT structuur. Vroeger heb ik hier wel een beetje mee gewerkt, maar dat was via zo'n IDE die alles voor je deed. Nu is het relatief belangrijk dat alles er nogal strak uitziet, en de Swing componenten zijn dat nogal.

Om alle componenten van die library er mooi uit te laten zien heb ik overal waar er AWT componenten werden gebruikt er Jcomponenten van gemaakt. Verder heb (bijna) (nog) niks veranderd eraan. Als bijvoorbeeld iets TextField extende, heb ik er JTextField van gemaakt.
Dat ging redelijk goed, want bijna alles werkte meteen goed (kwa compilen). Al deze custom objecten hebben een speciale event handling, zodat als ze aan elkaar gekoppeld zijn (dat ga dmv. Controllers) dan herevalueren ze hun waardes en dergelijke. Er waren een paar probleempjes, waar de JTextField bv. geen processTextEvent() had, die heb ik veranderd in processEvent().

Nu voor het eigenlijke probleem. Alles wordt niet goed getekend. Voor de Java kenners zal ik ongeveer de opbouw uitleggen.
Ik heb een JFrame daarin als content een JPanel. Die heeft een menu en JTabbedPanel. Ik beschouw nu alleen even de eerste tab (andere tabs ben ik nog niet aangekomen). In de eerste tab zit een JPanel met BorderLayout. Voor elk region, heb ik een andere JPanel die FlowLayout heeft. Tot nu toe heb ik NORTH CENTER en EAST gebruikt. In die afzonderlijke JPanels doe ik dan de objecten die ik wil tonen. Daaronder heb ik nu een JLabel, ExpressionInput (een subClass van JTextField) een Canvas en JButtons. Eigenlijk iets teveel om los op te noemen. Die buttons worden voor mij gegenereerd en zitten weer in een eigen JPanel.

Zo ziet het eruit als ik het opstart:
Afbeeldingslocatie: http://vulcanus.its.tudelft.nl/zeikerd/pics/JTrain-slecht.jpg

Als ik tussen 2 tabs schakel komt het canvas pas te voorschijn (niet als ik inzoom ofzo). Als ik over de knoppen ga of op ze klik, dan worden die pas getekend en als ik inzoom met een knop, dan worden pas die textveldjes getekend met de waardes erin. Zo ziet het er goed uit:
Afbeeldingslocatie: http://vulcanus.its.tudelft.nl/zeikerd/pics/JTrain-goed.jpg

Ik gebruik deze components: JavaMath
Weet iemand al na dit gezien te hebben wat ik fout doe? Zo niet, zeg dan even welk gedeelte van de code je wilt zien.

"Beauty is the ultimate defence against complexity." David Gelernter


  • andrew
  • Registratie: Februari 2001
  • Laatst online: 10-09-2024
Roep je wel een repaint() aan nadat alle componenten op het scherm zijn aangemaakt?

Als je van tab switcht gebeurt dit namelijk ook..


edit:

En anders, staan die Swing componenten misschien standaard op invisible?

[ Voor 25% gewijzigd door andrew op 08-03-2004 19:43 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Topicstarter
Ik maak alle elementen eerst aan, voeg ze aan elkaar toe enzo. Dan als alles klaar is, dan .pack() ik de JFrame en dan .setVisible(true) ik hem. Als ik daarna .repaint() op hem aanroep maakt dat niks uit. Als ik dat aan de afzonderlijke componenten doe werkt dat ook niet, maar dat is ook niet vreemd, omdat hun parent container nog niet visible is.

"Beauty is the ultimate defence against complexity." David Gelernter


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

Topicstarter
Hmmm, ik denk dat ik al een groot gedeelte van het probleem heb gevonden. 1 Van die custom components had namelijk de paint() methode overriden, maar riep niet zijn super paint methode aan, waardoor zijn sub componenten niet werden getekend.
Nu heb ik alleen dat probleem met dat Canvas nog, waar geen menu's overheen verschijnen, misschien zal ik die moeten herschrijven om gebruik te laten maken van een JPanel.

"Beauty is the ultimate defence against complexity." David Gelernter