Toon posts:

[java] fontmetrics/linemetrics zonder Graphics

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem: Ik heb een klasse en daar gooi ik via de constructor 1 enkele char in. Deze klasse moet de char zelf kunnen tekenen en heeft daarvoor een paint(Graphics g) methode. Logischerwijs wordt deze methode pas aangeroepen als ik vind dat het tijd is om te tekenen. Maar wat ik van te voren wel wil weten is wat de afmetingen zijn van deze char. En daar zit nou net het probleem.

de methode getFontMetrics is depricated in de java.awt.Toolkit class en gebruik ik dus niet. Voor de rest kom ik alleen een dergelijke methode tegen in de Graphics class. Ik kan wel een BufferedImage maken oid, maar dan nog moet ik eenmaal een grootte gokken van de image en lijkt me dus niet wenselijk.

Is hier een straightforward manier voor?


En hieronder nog wat code voor die onzinnige post_is_wat_code_roepers O-)
code:
1
2
3
4
5
6
7
8
9
10
public class MyClass{
  char ch;
  public MyClass(char ch){
    this.ch = ch;
  }
  public Dimension getDimension(){
    //doe berekeningen op de char...
  }
  public void paint(Graphics g){}
}

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Bij die getFontMetrics methode staat (in de api docs van J2SE 1.4 iig):
Deprecated. As of JDK version 1.2, replaced by the Font method getLineMetrics
Kijk daar eens naar zou ik zeggen.

Verwijderd

Topicstarter
Voor die methode heb je een FontRenderContext nodig, en je raad zeker al waar je die vandaan haalt....

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Misschien moet je je eens afvragen waarom er een graphics object nodig is ;)
Juist ja: eigenschappen van een lettertype zijn afhankelijk van het component waarom de tekst geplaats wordt (resolutie e.d.). Je kunt niet om het graphics object heen en ik weet niet waarvoor je de informatie nodig hebt, maar een buffered image maken en daarvan het graphics object pakken kan wel, maar dat garandeert niet dat je de waaarden krijgt die je verwacht.

Wanneer heb je deze informatie nodig? Kan je dit niet uitstellen totdat je een graphics object in handen hebt?

[ Voor 14% gewijzigd door Infinitive op 18-02-2004 00:19 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Verwijderd schreef op 17 februari 2004 @ 23:52:
Voor die methode heb je een FontRenderContext nodig, en je raad zeker al waar je die vandaan haalt....
Van de public constructor? ;) :P
code:
1
2
3
public FontRenderContext(AffineTransform tx,
                         boolean isAntiAliased,
                         boolean usesFractionalMetrics)

(tx is optioneel)
De vraag is alleen of je dan wel het goede resultaat krijgt. Zie post van Infinitive
:)

Verwijderd

Topicstarter
Infinitive schreef op 18 februari 2004 @ 00:17:Wanneer heb je deze informatie nodig? Kan je dit niet uitstellen totdat je een graphics object in handen hebt?
Ik begrijp de motivatie erachter waarvan de rendering afhankelijk is, dessalniettemin zou je deze dan logischerwijs ook zelf moeten kunnen opgeven.

En waarvoor ik het nodig heb, ik bouw een editor waarbij een glyph zichzelf tekent, en ik wil van te voren weten hoe breed deze bijvoorbeeld is. Is deze te breed moet deze immers op een volgende regel worden geplaatst...

Verwijderd

Topicstarter
*een bescheiden doch tamelijk gericht schopje :)
Pagina: 1