Stringbreite



  • Hi,

    kann mir jemand sagen ob es eine Möglichkeit gibt mir die Breite eines Strings, der auf dem Bildschirm ausgegeben wird, anzeigen lassen kann. In C++ konnte man sich die breite des Strings in Pixeln angeben lassen. Geht das hier auch?

    Danke



  • Schau dir am besten noch einmal die API-Dokumentation der Klasse java.awt.Graphics an - da stehen alle Methoden drin, die du dafür brauchst.



  • Jetzt habe ich es sogar in der Graphics Klasse gefunden. Manchmal braucht nur nen kleinen hinweis. Danke.

    Dabei ist aber eine neue Frage aufgetaucht. *Peinlich 😮

    Ich hoffe ich habe das nicht nur übersehen aber kann man die Dicke der Linie verändern? (Graphics, drawLine(int x1, int y1, int x2, int y2))



  • Ja das geht allerdings ist das etwas umfangreicher, als man vielleicht meinen möchte. Die Klasse java.awt.Graphics bringt dir an dieser Stelle gar nichts. Aus dem Graphics-Objekt muss ein Graphics2D-Objekt gemacht werden mittels einem Cast und dann kann via setStroke(...) ein neuer Stroke mit den gewünschten Eigenschaften definiert werden.
    Beispiel:

    ...
        public synchronized void paint(Graphics g) {
            Graphics2D g2d = (Graphics2D)g;
            g2d.setStroke(new BasicStroke(2.0f));
            g2d.drawLine(...);
            ...
        }
    ...
    


  • Also ich habe jetzt einfach kleine Rechtecke benutzt um dicke Linien zu zeichen. Das ist zwar nicht so elegant aber aber es geht.

    Anderes Problem:

    Ich habe den Code unten mal ausprobiert. Das Ereignis tritt auch immer ein. Mein Problem ist aber das ich mit meiner Methode plottAchsen() etwas auf den Frame zeichnen will(mit Graphics). So wie es ausschaut wird das Fenster aber beim Verlassen von formComponentResized() neu gezeichnet. Damit sind meine schönen Zeichnungen immer wieder weg. Kann ich das verhindern oder geschickter machen?

    addComponentListener(new java.awt.event.ComponentAdapter() {
       public void componentResized(java.awt.event.ComponentEvent evt) {
       formComponentResized(evt);}});
    
    private void formComponentResized(java.awt.event.ComponentEvent evt)
    {
    plottAchsen();
    }
    


  • Immer darzustellende Dinge sollten in paint() oder innerhalb der paint-Methoden-Hierarchie (paintComponent, paintComponents) gezeichnet werden.



  • Hi, also ich habe jetzt folgendes gemacht.

    public void paint(Graphics g)
      {
      super.paint(g);
      plottAchsen(schritt[s]);
      }
    

    Gibt es da noch was was man berücksichtigen muss. Ich meine die PaintMethode wird doch ziemlich oft aufgerufen oder? Sollte man das so machen?



  • Alles was du zeichnen lassen willst sollte ein Objekt sein, das in den Container eingefügt werden kann. Damit würden nämlich später nur diejenigen Objekte neu gezeichnet, die das auch benötigen.


Log in to reply