Seite 1 von 2

Methode die Text kürzt?

Verfasst: 29 Okt 2004, 11:20
von platin(x)
Habt ihr zufällig schon eine Methode die aus einem langen String
NewsFeed Hallo Welt, NewsFeed Hallo Erde, NewsFeed Hallo Mars

je nach Platz in einem Label
NewsF. Hall. Wel., NewsF. Hall. Erd., NewsF. Hall. Mar...

macht?

Also den Text nach jedem Wort kürzt bis der Platz reicht, nicht das typische "..." am Ende was sonst kommt.

Doppelte Arbeit muss ja nicht sein ;)

Verfasst: 29 Okt 2004, 11:37
von Til
Schmeiss einfach den kompletten Text in ein JLabel rein, das kürzt den Text dann automatisch.

Damit dein Label nicht den ganzen Dialog extrabreit macht, kannst du mit setPreferredSize() dem Label eine feste Größe geben.

Oder willst du mehrzeiligen Text?

Verfasst: 29 Okt 2004, 12:37
von platin(x)
Das will ich ja grad nicht, der Text soll nicht am Ende gekürzt werden (diese "..."), sondern die Wörter sollen im ganzen Text beschnitten werden.
Ich will damit erreichen das nicht hinten plötzlich ganze Wörter fehlen, sondern das dann einfach in der Mitte ein Wort abgekürzt wird.

Verfasst: 29 Okt 2004, 12:40
von Crasline
aber ehrlich gesagt find ich das beispiel was du gepostet hast für die abgekürzten wörter nicht wirklich gut und so überhaupt nicht verständlich ... das klingt so nach Handy telefonierem im Funkloch :)

Verfasst: 29 Okt 2004, 13:32
von platin(x)
Klar, schön sieht das nicht aus...

Der Text wird nur kurz beim Aktualisieren angezeigt, ich will damit erreichen das hinten nicht ein Feed verschluckt wird, deswegen sollen die anderen Platz machen ;)

Verfasst: 29 Okt 2004, 14:43
von bodo
Ich find das irgendwie doof...die kryptischen sachen kann doch keiner Verstehen :?

H.f. M.e.e. sdf.er.we.er.e.wer. usw ;) ?!

Dann lieber mit "..." am schluß

Verfasst: 29 Okt 2004, 15:09
von platin(x)
bodo hat geschrieben:H.f. M.e.e. sdf.er.we.er.e.wer. usw ;)
Das wär der absolute worst-case ;)

Mal auf die Schnelle:

Code: Alles auswählen

    public static String truncateText(FontMetrics metrics, int width, String txt) {
        if(txt == null) {
            return null;
        }
        
        final int actWidth = metrics.stringWidth(txt);
        if(actWidth <= width) {
            return txt;
        }
                
        StringBuffer buffer = new StringBuffer(txt.length());
        String[] parts = txt.split("\\s");

        int minLength = 0;
        for(int i=0; i<parts.length; i++) {
            if(parts[i] != null) {
                minLength = Math.max(minLength, parts[i].trim().length());
            }
        }
        
        for(int i=0; i<parts.length; i++) {
            
            if(parts[i] != null) {
                String elem = parts[i].trim();
                if(elem.length() >= minLength ) {
                    
                    if(elem.endsWith(",")) {
                        buffer.append(elem.substring(0, elem.length()-3));
                        buffer.append(".,");
                    } else {
                        buffer.append(elem.substring(0, elem.length()-2));
                        buffer.append(".");
                    }
                    
                } else {
                    buffer.append(elem);
                }
                
                if(i <= parts.length) {
                    buffer.append(" ");    
                }
            }
            
        }
        return truncateText(metrics, width, buffer.toString());
    }
Für meinen Anwendungsfall bislang ganz OK.

Verfasst: 29 Okt 2004, 17:32
von Til
Also ich finde das auch etwas heftig. Mach doch lieber die normalen drei Punkte und dann den vollen Text als Tooltip. Ich glaube das bringt dem Benutzer mehr...

Verfasst: 29 Okt 2004, 17:44
von bodo
Das wäre auch das gewohnte Verhalten ;). Wofür brauchst du das eigenltich genau?

Verfasst: 29 Okt 2004, 18:11
von platin(x)
In 10 min seht ihrs. Danach könnt ihr mich in der Lust zerreisen ;)

Verfasst: 29 Okt 2004, 18:38
von bodo
Wo benutzt du das!? Hab kurz ma in das Plugin reingschaut und nix gefunden?

Verfasst: 29 Okt 2004, 18:47
von platin(x)
Optionen => Alle Aktualisieren

Dort steht dann "Lade:" und die Feed-Namen.
Du sieht's aber nur wenn du einige Feeds drin hast oder das Fenster sehr klein ist. Falls zu viele drin sind, wird nichts gekürzt.

Verfasst: 29 Okt 2004, 19:09
von bodo
Axo...da hab ich garnich sooovieele feeds das das problematisch sein könnte

Verfasst: 30 Okt 2004, 18:35
von platin(x)
Hmm, habt ihr gedacht ich will die Überschriften der Nachrichten kastrieren?
Sowas würd mir doch niiiemals in den Sinn kommen :roll: :wink:

Verfasst: 30 Okt 2004, 18:45
von Martin
platin(x) hat geschrieben:Du sieht's aber nur wenn du einige Feeds drin hast oder das Fenster sehr klein ist. Falls zu viele drin sind, wird nichts gekürzt.
Ich finde, daß sich das Kürzen nicht lohnt.
Weil:
  • 1. fällt das eh niemandem auf
und
  • 2. ;-)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:100)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.util.IOToolkit.truncateText(IOToolkit.java:117)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.update(NewsFeedStatusBar.java:338)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.add(NewsFeedStatusBar.java:310)
at newsfeedplugin.ui.NewsFeedStatusBar$StatusTextWrapper.access$300(NewsFeedStatusBar.java:294)
at newsfeedplugin.ui.NewsFeedStatusBar.propertyChange(NewsFeedStatusBar.java:150)
at newsfeedplugin.core.NewsFeedObject.firePropertyChange(NewsFeedObject.java:527)
at newsfeedplugin.core.NewsFeedObject.setState(NewsFeedObject.java:304)
at newsfeedplugin.core.NewsFeedObject.downloadAndParseXml(NewsFeedObject.java:325)
at newsfeedplugin.ui.NewsFeedChooserPanel$9.run(NewsFeedChooserPanel.java:258)