(J)Label + umbruch



  • Hi

    wie kann ich in einem (J)Label einen Zeilenumbruch einfügen????? Ich glaube mal das es bei c++ mit "/n" ging aber wie geht dat in Java. Habe mal das /N ausprobiert aber funzt nicht.

    thx im voraus



  • Das geht mit JButton allein überhaupt nicht. Ich erinnere mich auch nicht daran, dass man es mitder WINAPI bzw. den MFCs hingebracht hätte ...

    Nun denn folgende Möglichkeiten gibts doch:
    Eine eigene Buttonklasse schreiben, die die paint()-Methode überschreibt. In dieser Methode lässt du einen StringTokenizer über '\n' laufen und spaltest so deine Teilstrings. Anschließend musst du noch diverse Berechnungen der Höhe des Buttons sowie dessen Breite machen und letztendlich jeden einzelnen String per drawString(...) zeichnen.



  • Hier ein Quick&Dirty Hack ...

    import javax.swing.JButton;
    import java.util.StringTokenizer;
    import java.util.Vector;
    import java.awt.Graphics;
    import java.awt.Color;
    import java.awt.font.LineMetrics;
    import java.awt.FontMetrics;
    
    public class MultiLineButton extends JButton
    {
        private Vector lines = new Vector(0, 1);
    
        public MultiLineButton(String str) {
            StringTokenizer tokenizer = new StringTokenizer(str, "\n");
            while (tokenizer.hasMoreTokens())
                lines.add(tokenizer.nextToken());
    
            System.out.println("Vector = "+lines);
        }
    
        public synchronized void paint (Graphics g) {
            super.paint(g);
            String init = (String)lines.elementAt(0);
            FontMetrics fm = g.getFontMetrics();
            float height = fm.getLineMetrics(init, g).getHeight();
    
            for(int i=0; i<lines.size(); ++i) {
                g.drawString((String)lines.elementAt(i), 5, (int)((i*height)+height));
            }       
        }
    
        public static void main (String args[]) {
            javax.swing.JFrame wnd = new javax.swing.JFrame("Test");
            wnd.getContentPane().add(new MultiLineButton("This is a\ntext of\nthree lines"));
            wnd.setSize(200, 100);
            wnd.show();
        }
    }
    

    Das Beispiel ist nicht vollständig und die Berechnungen für die Textposition sind ein wenig rudimentär zeigen aber den Weg um dahin zu kommen... hope that helps.



  • thx für die Antowrt aber ist mir doch zuviel Aufwand für dieses simple Problem.
    Ist schade dat es nicht einfacher geht. Nun dann muss ich mir halt was anderes ausdenken

    aber trotzdem thx



  • Original erstellt von de_Bert:
    **thx für die Antowrt aber ist mir doch zuviel Aufwand für dieses simple Problem.
    **

    Komische Antwort! Das ist ne Klasse, die man einmal schreibt und dann immer wieder verwenden kann. Zudem sollte es nicht sooo viel Aufwand sein. ...und wenn man es kompliziert findet, dann wird man zudem noch einiges dabei lernen.



  • Wie kommst Du denn dazu zu sagen, dass es ein "simples Problem" ist? Wenn es simpel wäre hättest Du es doch schon geschrieben? 🙂



  • du kannst es ja mit dem einfügen eines html tags versuchen. dann formatiert sich das label zwar etwas anders (z.b. wenn du mehr text drin hast als platz ist, werden normalerweise an den text von dir "..." angehängt und wenn du html im text des label verwendest nicht mehr. der text bricht dann einfach ab) aber du kannst alles, was du mit texten durch html machen kannst auch in einem label verwenden. beispielsweise also auch <br>.

    cu
    wayne



  • Davon rate ich aber (wie immer) ab. Das Rendern des Buttons dauert extrem lange. Macht keinen Spass. Ist nicht schön 🙂


Anmelden zum Antworten