Schriftgröße in Punkt aus Pixeln berechnen

antimon

Mitglied
Hallo zusammen,

mich plagt momentan ein Problem, auf das ich auch nach dem Wälzen von zig Internetseiten keine Lösung gefunden habe...

Und zwar habe ich eine Box, in der ein Text steht. Die Box kann vergrößert/verkleinert werden, dabei soll der Text entsprechend angepasst werden, damit die Größenverhältnisse konstant bleiben.

Über FontMetrics bekomme ich heraus, wie viele Pixel ein String lang/hoch ist bei gegebener Schriftgröße in Punkt - allerdings will ich es ja genau anders rum haben...

Natürlich könnte ich die Schriftgröße um einen bestimmten Wert in Punkt vergleinern/vergrößern, und zwar so lange bis die gewünschte Größe erreicht ist, aber das muss doch optimaler zu berechnen sein oder? Wenn aus einer Schriftgröße in Punkt eine Größe in Pixeln berechnet werden kann, sollte das umgekehrt ja auch gehen.

Das Ganze muss auch nicht Groß/Kleinschreibung berücksichtigen, es reicht, das größte Zeichen zu berücksichtigen.

Hat jemand eine Idee zur Vorgehensweise?
 
Wo ist das Problem?

Java:
package core;

import java.awt.Dimension;
import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class Main extends Object
{
	private final static Dimension TEXT_FIELD_SIZE = new Dimension(500, 200);
	
	public Main()
	{
		super();
	}
	public static void main(String[] args)
	{
		JFrame jframe = new JFrame("");
		jframe.setSize(800, 600);
		jframe.setLocationRelativeTo(null);
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jframe.setLayout(null);
		
		JTextField field = new JTextField("Text");
		field.setLocation(10, 10);
		field.setSize(Main.TEXT_FIELD_SIZE);
		
		Font oldFont = field.getFont();
		Font font = new Font(oldFont.getFontName(), Font.PLAIN,
				(int)field.getSize().getHeight());
		field.setFont(font);
		
		jframe.add(field);
		jframe.setVisible(true);
	}
}
 
Naja das Problem liegt hier:

Java:
 Font font = new Font(oldFont.getFontName(), Font.PLAIN,
                (int)field.getSize().getHeight());

Wenn ich folgenden Code ausführe

Java:
Font testfont = new Font("Helvetica", Font.PLAIN, 200);
		
// This label is only used to get FontMetrics
JLabel tmp = new JLabel("Test");
FontMetrics fm = tmp.getFontMetrics(testfont);

System.out.println("Height of font: " + fm.getHeight());

erhalte ich das als Ausgabe: "Height of font: 230"

Imho wird die Schriftgröße ja nicht in Pixeln angegeben, sondern in Punkt - und ich bräuchte die Umrechnung von Pixel in Punkt... :-/
Oder täusche ich mich und habe den Code falsch interpretiert?
 
Zuletzt bearbeitet:
1 Pixel sind 3/4 Point.
Aber so würde es doch eh gehen, oder?
In meinen Tests mit dem Programm hat der Text eigendlich immer gepasst.
 
Hmm ich werds mal probieren.

Aber was mich interessieren würde - woher hast du die Information, dass ein Pixel genau 3/4 Punkt darstellt? Ich meine eigentlich ist es doch systemabhängig, wie groß eine Schrift auf dem Bildschirm angezeigt wird oder nicht? Ich könnte mir vorstellen dass ein Linux mehr/weniger Pixel für eine 32-Punkt-Schriftart verwendet als ein Windows... aber die Box soll auf allen Systemen gleich aussehen...

Nicht dass ich es dir nicht glauben möchte, aber ich habe nach der Info im Internet mehrere Stunden gesucht und nix gefunden, deswegen würds mich wundern wenns so einfach wär...
 

Neue Beiträge

Zurück