Hallo, ich brauche je nach String und der bestimmten Width von einem Rechteck ein bestimmtes Font. Ich habe vollgendes "Verfahren gemacht", das ist allerdings sehr unschön gemacht von mir. Mir fällt trotzdem keine andere Möglichkeit ein.
Danke im Voraus.
Edit: Prefix müsste awt sein 😅
Java:
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
public class FontGenerator {
public static void main(String[] args) {
FontGenerator fg = new FontGenerator();
System.out.println(fg.getEffectFont(400, 30, 25).getSize());
}
public String getEffect() {
return "Generates a Font for a certain String";
}
private Font effectFont;
public Font getEffectFont(int width, int rand, int toleranz) {
if (effectFont == null)
effectFont = loadEffectFont(width, getEffect(), rand, toleranz);
return effectFont;
}
private Font loadEffectFont(final int width, final String str, final int rand, final int toleranz) {
final Component c = new Container();
Font font = new Font("serif", Font.BOLD, 20);
int length = 0;
for (int i = 20; i < 80; i++) {
font = new Font("serif", Font.BOLD, i);
length = c.getFontMetrics(font).stringWidth(str);
if ((width - rand * 2) - length <= toleranz && (width - rand * 2) - length > 0)
break;
}
return font;
}
}
Edit: Prefix müsste awt sein 😅