getFontMetrics() außerhalb des Components

Status
Nicht offen für weitere Antworten.

conan2

Aktives Mitglied
Bei einem Programm muss ich in mehreren Klassen wissen, wie breit ein am Bildschirm anzuzeigender Text ist,
dabei bleibt der Font immer gleich. Nun will ich die Funktion natürlich nicht in jeder Klasse neu definieren sondern
will mir dazu eine Tools-Klasse mit statischen Methoden schreiben. Ich versuchte also sowas wie
Code:
public static void getStringWidth(String s){
    FontMetrics fm = getFontMetrics(new Font("Times New Roman", Font.PLAIN, 10));
    return fm.stringWidth(s);
}
Natürlich bekam ich sofort eine Fehlermeldung dass die Methode getFontMetrics() nicht existent ist und bin
draufgekommen dass sie nur in der Klasse Component existiert. In der Toolkit-Klasse gibt es die Methode auch,
allerdings ist sie dort deprecated. Danach bin ich noch auf die getLineMetrics()-Methode aufmerksam geworden aber in
der LineMetrics-Klasse konnte ich keine getWidth()-Methode oder was Ähnliches finden. Weiß da jemand einen Ausweg?
 

thE_29

Top Contributor
Graphics.getFontMetrics(); gibts noch!

Einfach die paint Methode überschreiben und dort zuweisen!
 
G

Guest

Gast
Genau hier liegt mein Problem!Wie schon gesagt benötige ich die getFontMetrics()-Methode in einer Tools-Klasse
und in der gibt's keine paint()-Methode, die ich überschreiben könnte.
 

thE_29

Top Contributor
Dann nimms Toolkit und scheiss auf das deprecated...

LineMetrics ist net mal ein annehmbarer Ersatz!


Oder ein dirty Trick ist


Code:
  public interface IFontMetricsSetter
  {
    public void setFontMetrics(FontMetrics metrics);
  }

Code:
  public void setFontMentrics(final Font font, final IFontMetricsSetter setter)
  {
    JFrame f = new JFrame(){
      public void paint(Graphics g)
      {
        super.paint(g);
        if(g != null)
          setter.setFontMetrics(g.getFontMetrics(font));
      }
    };
    f.setUndecorated(true); //damit keine Titelleiste angezeigt wird!
    f.setLocation(-1000,-1000); //irgendwo außerhalb vom Bildschirm
    f.setVisible(true);
    f.setVisible(false);
  }

Du brauchst halt nen Zugang zur grafischen Oberfläche! Aber die braucht man schon, sobald man new Font sagt!
 

conan2

Aktives Mitglied
Danke das hat mir jetzt weitergeholfen :D
Ich habs einfach so gemacht: new Frame().getFontMetrics(...)
Oder ist das vielleicht ein Problem weil dann jedesmal wenn die Methode aufgerufen wird ein new Frame() erzeugt wird?
 

Wildcard

Top Contributor
ohne das jetzt verifiziert zu haben würde ich behaupten das jeder neue Frame über einen eigenen GraphicContext verfügt und die Font-Metrics damit nicht identisch sind.
 

thE_29

Top Contributor
Naja, es würde ja auch new JButton().getFontMetrics, etc gehen, da es ja von java.awt.Component ist ;)
 

conan2

Aktives Mitglied
Hab mich dann für die deprecated-Methode vom Toolkit entschieden und zwar darum, weil ich glaub dass da den
Developern ein kleiner Fehler unterlaufen ist, denn in den javadocs steht bei der Toolkit.getFontMetrics()-Methode dabei
dass sie durch Font.getLineMetrics() ersetzt wurde, aber da das keinen Ersatz darstellt nehm sie einfach trotzdem...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
C Alternative zu getFontMetrics um Stringlänge zu berechnen AWT, Swing, JavaFX & SWT 2
volcanos SpringLayout mit zusätzlichen Buttons außerhalb des SpringLayout AWT, Swing, JavaFX & SWT 33
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
N Swing außerhalb des Hauptframe Komponente/Frame öffnen AWT, Swing, JavaFX & SWT 2
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
T MouseMotionListener außerhalb von Frame AWT, Swing, JavaFX & SWT 3
MrGe getWidth(); getHeight(); außerhalb von paintComponent AWT, Swing, JavaFX & SWT 4
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
J JTextArea wird nicht aktualisiert bei Zugriff von außerhalb AWT, Swing, JavaFX & SWT 2
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
T erkennen ob innerhalb oder außerhalb von canvas gezeichnet AWT, Swing, JavaFX & SWT 2
MiMa JavaFX Runtime components are Missing??? AWT, Swing, JavaFX & SWT 3
F JavaFX JavaFX Builden: JavaFX Runtime components are missing AWT, Swing, JavaFX & SWT 0
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
K JDialog zeigt Components nicht an AWT, Swing, JavaFX & SWT 3
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
G Components erscheinen erst bei Änderung des Frames AWT, Swing, JavaFX & SWT 3
A Swing Liste von komplexen Components AWT, Swing, JavaFX & SWT 2
xehpuk Swing Erst Components, dann Container zeichnen AWT, Swing, JavaFX & SWT 2
I LayoutManager CardLayout mit anonymen Components AWT, Swing, JavaFX & SWT 4
J remove() components bei event von JComboBox AWT, Swing, JavaFX & SWT 2
M Special design of Swing components AWT, Swing, JavaFX & SWT 14
hdi dynamische Iteration über Components AWT, Swing, JavaFX & SWT 3
V components nordwest alignen AWT, Swing, JavaFX & SWT 4
P Components überlagern AWT, Swing, JavaFX & SWT 8
B HTML in Swing Components (JLabel) AWT, Swing, JavaFX & SWT 7
S 2 components & 1 button AWT, Swing, JavaFX & SWT 4
hdi Fenster mit variablen Components AWT, Swing, JavaFX & SWT 3
M icons für die java.swing components wie jbutton etc AWT, Swing, JavaFX & SWT 5
K Components auf Codeebene vor reverse engineering schützen? AWT, Swing, JavaFX & SWT 16
K Layout - Components richtig setzen AWT, Swing, JavaFX & SWT 9
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
G Components form AWT, Swing, JavaFX & SWT 3
P Components updaten AWT, Swing, JavaFX & SWT 2
masta // thomas GridBagLayout - Zwischenraum zw. Components AWT, Swing, JavaFX & SWT 7
G components unbeweglich machen AWT, Swing, JavaFX & SWT 3
F Components aneinander AWT, Swing, JavaFX & SWT 2
W Components Focus mit TAB-Taste VERTIKAL bewegen AWT, Swing, JavaFX & SWT 4
V Zugriff auf Components aus einem ActionListener AWT, Swing, JavaFX & SWT 3
W JTable und mehrere Components in einer Zelle AWT, Swing, JavaFX & SWT 4
meez Striche rund um Components AWT, Swing, JavaFX & SWT 6
A Components in einer ArrayList aus anderer Klasse speichern AWT, Swing, JavaFX & SWT 8
K MouseEvents vor den Components abfangen? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben