tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von Thomas Darimont
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
513
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ROCKSCHTAR ROCKSCHTAR ist offline Mitglied
    Registriert seit
    Jan 2010
    Beiträge
    16
    Moin @all

    ich habe folgendes Problem:
    In einer Oberfläche ist ein JTextfield eingebaut, dass eine Spaltenanzahl von 20 besitzt. Jetzt kommt in das Textfeld ein Text rein, der aber nicht ganz in das Textfeld reinpasst (der Text wird also abgeschnitten und man sieht den rest nur, wenn man mit dem Cursor nach hinten markiert). Jetzt ist es aber in manchen fällen so, dass es nicht ersichtlich ist, dass noch etwas folgt. Also war meine Idee (wie man es von anderen Programmen auch kennt), dass man, wenn der Text nicht reinpasst, am Ende drei Punkte einfügt (Bsp: Max Muster...).
    So weiß man, dass noch etwas folgt und man kann dann mit der Maus nach hinten markieren.

    Meine Frage wäre also: Gibt es eine Methode, die so etwas kann, oder gibt es ein Layout, dass dieses automatisch macht (bis jetzt ist auf dem ganzen Panel ein Gridbaglayout gesetzt)

    Freue mich auf eure Antworten

    Gruß Rockschtar

    (Ps: Wenn noch mehr Informationen nötig sind oder etwas nicht klar ist, schreibt mir bitte oder macht einen post)
     

  2. #2
    Elmu Tutorials.de Gastzugang
    Ich wüsste jetzt zwar nicht wie man das so machen soll, aber einen Umweg wüsste ich.

    Du kannst ja die Spaltenbreite ermitteln und dann definierst du für eine Spaltenbreite die länge des anzuzeigenden Strings.

    Beispiel.

    Spalte ist 20(mm) breit,... du lässt 5 Zeichen des Stringes anzeigen und fügst dann einen String von 3 Punkten (...) hintendran.

    Bei 30(mm) lässt du 7 Zeichen des Stringes anzeigen, gefolgt von 3 Punkten.

    Wenn die Zelle angewählt ist, dann lässt du nur deinen Text anzeigen.

    // Warum machst du die Spalten nicht breiter, wenn es nur etwas ist?
     

  3. #3
    ROCKSCHTAR ROCKSCHTAR ist offline Mitglied
    Registriert seit
    Jan 2010
    Beiträge
    16
    Wenn es nach mir ginge, hätt ich die Spalten auch länger gemacht... aber meine Mitarbeiter sagen, dass das dann sch***e aussieht -,-
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.724
    Blog-Einträge
    29
    Hallo,

    schau mal hier:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    
    package de.tutorials.training.swing;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
     
    import javax.swing.JFrame;
    import javax.swing.JTextField;
     
    public class TextFieldEllipsis extends JFrame{
        
        public TextFieldEllipsis(){
            super("TextFieldEllipsis");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            
            String text = "ABCDEABCDEABCDEABCDEABCDE";
            int columns = 20;
            CustomTextField customTextField = new CustomTextField(text,columns);
            JTextField normalTextField = new JTextField(text,columns);
            add(customTextField,BorderLayout.NORTH);
            add(normalTextField,BorderLayout.SOUTH);
            pack();
            
            setVisible(true);
        }
        
        public static void main(String[] args) {
            new TextFieldEllipsis();
        }
        
        static class CustomTextField extends JTextField{
     
            public CustomTextField(String text, int columns) {
                super(text, columns);
            }
            
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                drawEllipsisAtEndIfTextIsNotFullyVisible(g);
            }
     
            protected void drawEllipsisAtEndIfTextIsNotFullyVisible(Graphics g) {
                FontMetrics fontMetrics = g.getFontMetrics();
                boolean textIsToLong = getWidth() < fontMetrics.stringWidth(getText());
                boolean lastCharacterVisible = getCaretPosition()-1 > getText().length()-1 - getColumns(); 
                if(textIsToLong && !lastCharacterVisible){
                    String ellipsis = "...";
                    
                    int x = (getWidth() - getInsets().right-fontMetrics.stringWidth(ellipsis));
                    int y = getHeight() /2 + fontMetrics.getAscent() / 2;
                    
                    g.setColor(getBackground());
                    g.fillRect(x, 0, getWidth()-x, getHeight());
                    g.setColor(Color.RED);
                    g.drawString(ellipsis, x, y);
                }
            }
        }
    }

    Gruß Tom
    ROCKSCHTAR bedankt sich. 
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    ROCKSCHTAR ROCKSCHTAR ist offline Mitglied
    Registriert seit
    Jan 2010
    Beiträge
    16
    BOAH... genau dass hab ich gesucht! Vielen Dank Thomas!
     

Ähnliche Themen

  1. Daten aus langem Text filtern
    Von Koose im Forum Java
    Antworten: 4
    Letzter Beitrag: 24.03.09, 11:57
  2. drei punkte am jtree blatt
    Von kyroding im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 31.07.08, 15:11
  3. suche idee für langem text in kleiner box
    Von BooKer im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 28.01.08, 21:33
  4. Antworten: 1
    Letzter Beitrag: 04.05.05, 09:26
  5. Antworten: 2
    Letzter Beitrag: 02.09.04, 15:35