[Java] Tekenen in een Frame

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • nec07
  • Registratie: December 2009
  • Laatst online: 30-08 10:12
Heey,
Voor school moeten we een Cijferadministratie programma maken in Java met behulp van (javaeditor). Als bonus had ik in gedachten om een grafische weergave te maken van de verdeling van de punten.

Dit houd in dat ik alle eindcijfers afrond naar hele getallen en dan van ieder cijfer (1-10) tel hoeveel hij voorkomt, vervolgens wil ik dit in een staafgrafiek weergeven.

Nu loop ik vast bij het tekenen. Het is allereerst handig om te weten dat ik een Frame maak dus geen Applet (i.v.m lezen en schrijven naar een extern bestand).

Het probleem is dat ik het niet voor elkaar krijg om de grafiek of wat dan ook weer te geven op het scherm. Zelfs g.drawString("Hello World", 10, 10); werkt niet. Met applets was het zo dat je het "control panel" waar alle knoppen en invoervelden aan gekoppeld werden uit moest schakelen omdat er als het ware achter getekend werd, dit werkt helaas niet in een Frame. Ik kan dus geen manier vinden om die grafiek naast/onder mijn interface weer te laten geven.

De "relevante" code is de volgende:

Java:
1
*snip*


Dus nogmaals het probleem is dat ik het eindproduct niet kan zien, tijdens compilen krijg ik geen errors, hoe krijg ik dit nu voorelkaar?

Alvast bedankt.

Gr Stephan

[ Voor 54% gewijzigd door RobIII op 01-12-2011 09:21 ]


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
Heb je al gezocht op google?

Een van deze links helpt misschien:
http://www.dreamincode.ne...wing-to-a-frame-resolved/
http://www.roseindia.net/...e/java/awt/AwtImage.shtml

edit:
Wordt paint überhaupt wel aangeroepen?
Controleer dat eens met een debugger of door een System.out in je paint methode te zetten.

[ Voor 21% gewijzigd door Jegorex op 29-11-2011 21:34 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je override de paint() method van het Frame en vervolgens plaats je er een Panel boven op. De paint method van het frame zal nooit iets laten zien omdat er een ontransparant grijs panel boven op ligt. Je zou dan de paint van het Panel moeten overriden.

Daarnaast gebruik je AWT widgets zoals Frame's en Panel's. Waarom gebruik je geen Swing components, JFrame en JPanel ? Swing is AWT + meer. Ik kan persoonlijk eigenlijk geen reden bedenken waarom ik AWT zou willen gebruiken. Als je voor native gaat kan je beter SWT gebruiken (maar dat is hier denk ik niet van toepassing).

Acties:
  • 0 Henk 'm!

Verwijderd

nec07 schreef op dinsdag 29 november 2011 @ 20:23:
Het probleem is dat ik het niet voor elkaar krijg om de grafiek of wat dan ook weer te geven op het scherm. Zelfs g.drawString("Hello World", 10, 10); werkt niet.
...
De "relevante" code is de volgende:
De relevante code zou in dit geval de gestripte versie zijn die juist "Hello world" probeert.

Wat ik altijd als eerste doe in dergelijke gevallen: geef al je componenten eens andere kleuren (roos, geel, groen, ... ) + eventueel nog een rand in een andere kleur. Meestal zie je dan heel rap welke component waar staat, en waarom dat je vb je Hello world string niet zou zien

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als je code dumpt plaatst, beperk je dan tot relevante delen (of beter: maak een uitgeklede testcase). We zitten hier niet om voor jou te debuggen, dat kun je prima zelf (Debuggen: Hoe doe ik dat?).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • nec07
  • Registratie: December 2009
  • Laatst online: 30-08 10:12
Heey allemaal,

Als eerste bedankt dat jullie de tijd nemen om te reageren. Het was niet de bedoeling om jullie mijn code na te laten kijken. Ik had inderdaad mijn code verder kunnen strippen, het was meer bedoeld als indicatie van hoe "de layers"/canvassen van de app in elkaar zitten. Ik verwacht ook niet dat ik code van jullie krijg, ik hoop alleen op een indicatie van wat er is (bijv een teken canvas waar ik op moet tekenen o.i.d).

@Jegorex Ik had al gegoogled maar dat was volgens mij of te moeilijk of niet relevant voor mijn programma. De twee links van jou zou ik wel wat mee kunnen. Thanks daarvoor! De paint methode wordt wel uitgevoerd, als ik een system print out tussen de paint methode zet dan krijg ik die gewoon te zien.

@JUDGExKTF Bedoel je dat ze in de "z-as" achter elkaar liggen en dat je dus de paint() methode bovenaan op de rest weer moet geven en dat er nu standaard andersom gedaan wordt? Verder gaat het om een opdracht in VWO-5 dus verwacht niet dat we heel erg ver er op in gaan en dat we gewoon de basis functies van het tekenen gebruiken zoals lijntjes rondjes en vierkantjes ;-)

Gr Stephan

Acties:
  • 0 Henk 'm!

Verwijderd

nec07 schreef op donderdag 01 december 2011 @ 17:21:
Bedoel je dat ze in de "z-as" achter elkaar liggen en dat je dus de paint() methode bovenaan op de rest weer moet geven en dat er nu standaard andersom gedaan wordt?
Zo kan je dat zien inderdaad. Als je het achterliggende wil zien kan je ook het panel transparant (niet ondoorschijnend) maken met panel.setOpaque(false); Dan zullen achter liggende components (in dit geval het Frame) wel gepaint worden.
Verder gaat het om een opdracht in VWO-5 dus verwacht niet dat we heel erg ver er op in gaan en dat we gewoon de basis functies van het tekenen gebruiken zoals lijntjes rondjes en vierkantjes ;-)
In dat geval zou ik de Swing API gebruiken ipv AWT (dus de JFrame ipv Frame en JPanel ipv Panel). Swing is voorspelbaarder dan AWT (Frame, Panel). Tegenwoordig is AWT meer een lowlevel mechanic van Swing en niet meer een technologie die op zich zelf gebruikt word. Je kan ook nog is kijken naar JavaFX wat Swing op termijn weer moet vervangen.
Pagina: 1