[Java] Width van een Label voordat ie gepaint is

Pagina: 1
Acties:

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Na de API-documentation doorgespit te hebben en met zowel google als op GoT gezocht te hebben, toch maar een topic.

Ik ben opzoek naar een mogelijkheid om de breedte (width) van een Label op te vragen voordat deze gepaint is.

Het probleem is dat Label.getWidth(), voordat het Label getekend is, nog 0 is. (Evenals alle andere properties van Label.getBounds() overigens)

Is het mogelijk te weten hoe breed mn Label zal worden? Misschien met functies van andere klassen dan Label...

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 17:38
Fl4sh3r schreef op 27 april 2004 @ 14:13:
Na de API-documentation doorgespit te hebben en met zowel google als op GoT gezocht te hebben, toch maar een topic.

Ik ben opzoek naar een mogelijkheid om de breedte (width) van een Label op te vragen voordat deze gepaint is.

Het probleem is dat Label.getWidth(), voordat het Label getekend is, nog 0 is. (Evenals alle andere properties van Label.getBounds() overigens)

Is het mogelijk te weten hoe breed mn Label zal worden? Misschien met functies van andere klassen dan Label...
Waarom wil je dat precies weten :?

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
We moeten voor school een lichtkrant maken in Java

Nu wil ik weten hoelang de tekst wordt (in pixels) zodat ik de tekst er zo vaak kan achterplakken dat ie het scherm vult

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 17:38
Fl4sh3r schreef op 27 april 2004 @ 14:31:
We moeten voor school een lichtkrant maken in Java

Nu wil ik weten hoelang de tekst wordt (in pixels) zodat ik de tekst er zo vaak kan achterplakken dat ie het scherm vult
Je wil dus de lengte van de string in het label in pixels weten, niet de lengte van het label zelf:


http://forum.java.sun.com...&forum=31&message=2434652

[ Voor 11% gewijzigd door Kwistnix op 27-04-2004 14:46 ]


  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Thanks ik ga kijken of ik er iets mee kan :)

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Hm... heb ik toch nog het probleem dat Graphics pas beschikbaar is als mn Label zichtbaar is.

code:
1
2
3
Font font = new Font ("lucida sans regular", Font.PLAIN, 24);
FontRenderContext frc = ((Graphics2D)this.getGraphics()).getFontRenderContext();
System.out.println(font.getStringBounds(text, frc));


code:
1
2
Exception in thread "main" java.lang.NullPointerException
 ...


Edit:
En uit de API:
getGraphics
public Graphics get Graphics()
Creates a graphics context for this component. This method will return null if this component is currently not displayable.

[ Voor 23% gewijzigd door Fl4sh3r op 27-04-2004 15:00 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
De oplossing is dan ook om je object eerst displayable te maken. Dat kun je doen door je Label eerst toe te voegen aan een displayable container (een zichtbare Frame of Applet bijvoorbeeld), of als je de container waar je Label in zit nog niet zichtbaar wil maken, door je Label toe te voegen en vervolgens pack() ofzo aan te roepen op de Container. In beide gevallen wordt je Label daardoor displayable en dan kun je getGraphics() gebruiken.

Elk van deze methoden heeft wel als nadeel dat het niet mogelijk is om de code die je geeft in de constructor van je van Label afgeleidde klasse te stoppen. Je moet dat dus in een aparte methode onderbrengen (en die pas aanroepen wanneer je de gegevens voor het eerst nodig hebt; bij het painten, bijvoorbeeld).

Misschien zijn er nog alternatieven die dit nadeel niet hebben; Java GUI programmeren is altijd een beetje tricky.

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
Bedankt voor deze duidelijk uitleg

Ik was al bang dat het buiten de constructor moest gaan gebeuren, maar het is niet anders.

Dan maar een andere oplossing zoeken

Bedankt

  • MaZeS
  • Registratie: Januari 2003
  • Laatst online: 18-09-2024
Werkt getPreferredSize().getWidth() ook niet?

[ Voor 14% gewijzigd door MaZeS op 27-04-2004 15:30 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
MaZeS schreef op 27 april 2004 @ 15:29:
Werkt getPreferredSize().getWidth() ook niet?
Als oplossing van het oorspronkelijke probleem misschien wel, maar ondertussen ging het alweer over andere dingen: het uitzoeken van font metrics. ;)

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Fl4sh3r schreef op 27 april 2004 @ 14:13:
Na de API-documentation doorgespit te hebben en met zowel google als op GoT gezocht te hebben, toch maar een topic.

Ik ben opzoek naar een mogelijkheid om de breedte (width) van een Label op te vragen voordat deze gepaint is.

Het probleem is dat Label.getWidth(), voordat het Label getekend is, nog 0 is. (Evenals alle andere properties van Label.getBounds() overigens)

Is het mogelijk te weten hoe breed mn Label zal worden? Misschien met functies van andere klassen dan Label...
na de .pack() is hij niet meer 0 en kun je deze gewoon opvragen.

  • Fl4sh3r
  • Registratie: Juni 2002
  • Laatst online: 26-03 21:19
MaZeS schreef op 27 april 2004 @ 15:29:
Werkt getPreferredSize().getWidth() ook niet?
Nee, dat werkt ook pas na .pack()
Pagina: 1