Hi,
ich hab ein JPanel dessen Größe sich ändern kann. Jetzt will ich innerhalb der paintComponent Methode einen String malen, der so groß wie möglich gemalt werden soll, so das er grad noch ins JPanel reinpasst.
Natürlich könnte ich das so lösen:
Ist natürlich performancetechnisch gesehen Schrott, da z.b. bei einer Fontgröße von 30 insgesamt 30 FontMetric Objecte beschafft und 30 Font-Objecte erschafft werden müssen.
Gibt es eine bessere Lösung oder eine bereits existierende Methode in der API die ich nicht gesehen habe?
mfg
Schandro
PS: Das ich das Ergebniss puffern könnte um nicht bei jedem Aufruf von paintComponent den Font neuberechnen zu müssen, weiß ich, darums gehts net. Auch dass ich mit der size des letzt benutzen Font als size starten könnte und mich dann abwechselnd nach oben und unten gleichzeitig durchkämpfen könnte ist mir klar...
ich hab ein JPanel dessen Größe sich ändern kann. Jetzt will ich innerhalb der paintComponent Methode einen String malen, der so groß wie möglich gemalt werden soll, so das er grad noch ins JPanel reinpasst.
Natürlich könnte ich das so lösen:
Java:
String text = "Hello, Universe!";
String fontFamily = "arial";
int fontType = Font.BOLD;
Font font = null;
Font lastFont = null;
FontMetrics fm = null;
for(int size=0;;++size){
fm = g.getFontMetrics(font = new Font(fontFamily,fontType,size));
if(fm.getHeight()>getSize().height || fm.stringWidth(text) > getSize().width){
break;
}
lastFont = font;
}
g.setFont(lastFont); // der aktuelle Font ist zu groß, der davor hat noch gepasst...
g.drawString(text,0,getSize().height);
Gibt es eine bessere Lösung oder eine bereits existierende Methode in der API die ich nicht gesehen habe?
mfg
Schandro
PS: Das ich das Ergebniss puffern könnte um nicht bei jedem Aufruf von paintComponent den Font neuberechnen zu müssen, weiß ich, darums gehts net. Auch dass ich mit der size des letzt benutzen Font als size starten könnte und mich dann abwechselnd nach oben und unten gleichzeitig durchkämpfen könnte ist mir klar...
Zuletzt bearbeitet: