Einträge in JList rechtsbündig darstellen

Bernhard Bergmann

Grünschnabel
Hallo,
Bin neu hier in Tutorial.de und gespannt, ob mir jemand helfen kann...

Ich trage eine Liste von Dateinamen incl. Pfad in eine JList ein. Da die Pfadnamen ziemlich lang werden können, habe ich die JList in eine ScrollBar gepackt. Das funktioniert auch.
Nach dem Zeichnen der Liste stehen die Einträge allerdings standardmäßig linksbündig; d.h. ich sehe die Root und den Anfang des Pfadnamens. Um die Dateinamen sehen zu können muss ich immer die horizontalen ScrollBar nach rechts schieben.

Jetzt die Frage,
kann man der JList irgendwie mitgeben, dass sie die Text-Einträge rechtsbündig anzeigt? Dann sehe ich die Dateinamen immer und für die nicht ganz so wichtigen Pfade kann ich ja nach links scrollen.

Bernd
 
Moin,
so wie ich das sehe geht das über einen eigenen ListCellRenderer, von JLabel abgeleitet und dort
setHorizontalAlignment(SwingConstants.RIGHT) setzen.
 
Hallo!

Schau mal hier:
Code:
/**
 * 
 */
package de.tutorials.training;

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;

/**
 * @author Darimont
 * 
 */
public class JListAlignmentExample extends JFrame {

	private JList list;

	public JListAlignmentExample() {
		super("JListAlignmentExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		DefaultListModel model = new DefaultListModel();
		model
				.addElement("C:/Programme/Java/jdk1.5.0_02/include/win32/jawt_md.h");
		model
				.addElement("C:/Programme/Java/jdk1.5.0_02/include/jdwpTransport.h");
		model.addElement("C:/foo.txt");

		list = new JList(model);
		list.setCellRenderer(new DefaultListCellRenderer() {
			public Component getListCellRendererComponent(JList list,
					Object value, int index, boolean isSelected,
					boolean cellHasFocus) {
				JLabel cell = (JLabel) super.getListCellRendererComponent(list,
						value, index, isSelected, cellHasFocus);

				cell.setHorizontalAlignment(SwingConstants.RIGHT);

				return cell;
			}
		});

		JScrollPane scrollPane = new JScrollPane(list);
		scrollPane.setPreferredSize(new Dimension(150, 100));
		add(scrollPane);

		pack();
		setVisible(true);

		JScrollBar horizontalScrollBar = scrollPane.getHorizontalScrollBar();
		int max = horizontalScrollBar.getMaximum();
		horizontalScrollBar.setValue(max);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new JListAlignmentExample();
	}
}

Gruß Tom
 
Hallo Snape, Hallo Tom,

Klasse,
das hat auf Anhieb funktioniert.
Herzlichen Dank !

Ich muss gestehen, mit dem ersten Hinweis von Snape konnte ich noch nicht so viel anfangen (bin noch nicht sooo lange im Java-Geschäft ;).
Mit dem erklärenden Beispiel von Tom war aber alles klar.

Wie geht das eigentlich jetzt weiter? Muss ich den Tag schließen (ist ja alles gesagt) oder bleibt der offen? Andere sollen davon ja auch etwas davon haben.

Gruß, Bernd
 
Bernhard Bergmann hat gesagt.:
Wie geht das eigentlich jetzt weiter? Muss ich den Tag schließen (ist ja alles gesagt) oder bleibt der offen? Andere sollen davon ja auch etwas davon haben.

Gruß, Bernd

Ruhig schließen, das Problem ist ja beseitigt. Die anderen User können das über die Suche finden. Das Tag bedeutet ja auch nicht, dass das Thema geschlossen ist. Wenn noch jemand zusätzliche Anmerkungen hat, können diese natürlich immer noch hinzugefügt werden.
 
Zurück