Swing Labeltext am Anfang statt am Ende kürzen

chriis

Aktives Mitglied
Moin,

ich hab ein JLabel das einen Pfad darstellen soll. Nun sind die meisten Pfade, die angezeigt werden sollen, zu lang für das Label und ich sehe immer nur den Anfang und der Rest wird mit Punkten abgekürzt. Ich würde nun gerne den Text vorne abkürzen, sodass man mindestens den Dateinamen sieht.

"X:/Fu/Bar/hallo.welt"
wird zu
"X:/Fu/..."
soll sein
"..llo.welt"

Gibt's ne möglichkeit das einfach zu realisieren, ohne dass ich die Länge berechnen müsste, die der Text einnehmen darf?
 
Entweder du nimmst File.getName() oder Du suchst von hinten nach vorne nach dem xten Vorkommen des (Back)Slashes und schneidest in Verbindung mit String.substring() ab. Wenn es zu lang ist, suchst du halt das Slash dannach und schneidest und vergleichst wieder, solange bis die Länge paßt, oder nur noch der eigentliche Dateiname übrig ist.
 
bei eigenem substring weiß man ja kaum wieviele Zeichen im JLabel aktuell angezeigt werden,

mit TextAlignment rechtsbündig wird vielleicht links abgeschnitten?
 
Er Meint das so:
[c]X:\useable\HelloFoo.bar[/c]

Angenommen das Label schneidet nach 15 zeichen ab, käme raus:
[c]X:\useable\Hell...[/c]
er will aber dass dann da steht:
[c]...le\HelloFoo.bar[/c]

Naja, ich glaube dir bleibt nichts anderes übrig, als den Pfad selbst zu schneiden + dann das Label zu füllen.
 
Jo, hat gerade hier ein Beispiel für einen 'left dot renderer' gefunden und mir daraus was gebastelt.

Java:
JFileChooser fchAuthorityFile = new JFileChooser();
FontMetrics fm = lblAuthorityFile.getFontMetrics(lblAuthorityFile.getFont());
String file;
	// OpenFile Dialog öffnen
	if(fchAuthorityFile.showOpenDialog(this) == JFileChooser.APPROVE_OPTION){
		file = fchAuthorityFile.getSelectedFile().getAbsolutePath();
		lblAuthorityFile.setToolTipText(file);
		// Prüfen, ob die Stringlänge zu groß für das Label ist
		if (fm.stringWidth(file) > lblAuthorityFile.getWidth()){
			String dots = "...";
			int textWidth = fm.stringWidth( dots );
			int i = file.length() - 1;
			// String verkürzen, bis die Größe passt
			for (; i > 0; i--){
				textWidth += fm.charWidth(file.charAt(i));
				if (textWidth > lblAuthorityFile.getWidth())
					break;
			}
			file = dots + file.substring(i + 1);
		}
		lblAuthorityFile.setText(file);
	}
 

Neue Themen


Zurück
Oben