Methode die Text kürzt?

Hier haben Plugin-Entwickler die Möglichkeit, sich auszutauschen.
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Methode die Text kürzt?

Beitrag 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 ;)
Benutzeravatar
Til
Site Admin
Beiträge: 1498
Registriert: 04 Dez 2003, 11:21
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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?
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag 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.
Crasline
Listings Provider & Server Hoster
Beiträge: 324
Registriert: 07 Jul 2004, 11:53
Kontaktdaten:

Beitrag 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 :)
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag 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 ;)
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag 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ß
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag 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.
Benutzeravatar
Til
Site Admin
Beiträge: 1498
Registriert: 04 Dez 2003, 11:21
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag 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...
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Das wäre auch das gewohnte Verhalten ;). Wofür brauchst du das eigenltich genau?
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag von platin(x) »

In 10 min seht ihrs. Danach könnt ihr mich in der Lust zerreisen ;)
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Wo benutzt du das!? Hab kurz ma in das Plugin reingschaut und nix gefunden?
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag 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.
Benutzeravatar
bodo
Site Admin
Beiträge: 19635
Registriert: 03 Dez 2003, 19:37
Wohnort: Köln
Kontaktdaten:

Beitrag von bodo »

Axo...da hab ich garnich sooovieele feeds das das problematisch sein könnte
platin(x)
Gold Member
Beiträge: 269
Registriert: 08 Jul 2004, 16:22

Beitrag 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:
Martin
Site Admin
Beiträge: 2357
Registriert: 03 Dez 2003, 21:45
Kontaktdaten:

Beitrag 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)
Antworten