Swing JList und Tabulator?

  • Themenstarter Themenstarter jf
  • Beginndatum Beginndatum

jf

Bekanntes Mitglied
Hallo, ich habe eine JList und möchte darin Tabulatoren verwenden, um eine gewisse Grundstrkutur zu erhalten (Spalten sind allerdings NICHT paktikabel, womit ein JTable keine Lösung darstellt). "\t" wird vom JList leider nicht als Tabulator interpretiert. Meine Frage lautet nun, ob es nicht doch einen Trick gibt, mein Ziel zu erreichen.
 
Klingt auf jedenfall nach einer Sache des ListCellRenderers. Vielleicht kannst du hier mit einer EmptyBorder bereits alles erreichen, weil die dafür sorgen kann, dass der darstellende JLabel entsprechend "eingerückt" wird.
 
(So ganz ist mir dein Problem jetzt nicht bewusst und beantworte die Frage wie ich sie verstanden habe🙂

Wenn ich in meiner JList ein Tabulatorfeld haben möchte geb ich einfach folgendes ein:
list.add( " " + variablerText );


oder

Du möchtest per Tabulatortaste die Liste durchwandern.

Müsste mit einem KeyListener zu machen sein.

Java:
{
    int x;
    x = list.getSelectedValue();
    x = x+1;
    list.setSelectedIndex(x);
}
 
Zuletzt bearbeitet:
Wenn ich in meiner JList ein Tabulatorfeld haben möchte geb ich einfach folgendes ein:
list.add( " " + variablerText );
Nein, da passiert überhaupt nichts - nicht mal ein Leerzeichen wird eingefügt.
Wenn man die Listeneinträge gleichzeitig auf der Console ausgibt, dann sind dort die Tabs vorhanden...
 
Wenn du die JList mit Strings befüllst könntest du es auch noch mit HTML-Formatierung probieren, also "<html><pre>" + text + </pre></html>". Ich weiß aber nicht ob das dann auch interpretiert wird, probieren kann man's jedenfalls mal.
 
Liegt glaube ich daran, dass JLabel keine TABs unterstützt.
Man könnte ein JTextField als Renderer verwenden:
Java:
import java.awt.Component;

import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JTextField;

public class TabRendererDemo extends JFrame {
	public TabRendererDemo() {
		JList list = new JList(new Object[] {"Hier\tTab\t\tda\tTab", "\t\tTab\t\t\tTab"});
		list.setCellRenderer(new TabRenderer());
		this.getContentPane().add(list);
	}
	
	class TabRenderer extends DefaultListCellRenderer {
		JTextField field = new JTextField();
		
		 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
			 super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
			 field.setText(super.getText());
			 field.setFont(super.getFont());
			 field.setBackground(super.getBackground());
			 field.setForeground(super.getForeground());
			 field.setBorder(super.getBorder());
			 return field;
		 }
	}
	
	public static void main(String[] args) {
		JFrame frame = new TabRendererDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Hallo Michael,

ich habe leider jetzt erst bemerkt, dass ich hier eine Antwort bekommen habe...
- Diese hat mir aber dafür sehr geholfen. Vielen Dank dafür! :toll:

Absolut perfekt wäre es jetzt noch, wenn man die Tablänge auf etwa die Hälfte reduzieren könnte.
Gäbe es auch für dieses Anliegen eine Lösung? :bahnhof:

Viele Grüße und nochmal großes Danke! 🙂
 
Statt eines JTextField könntest du eine JTextArea benutzen.

Bei einer JTextArea gibt es die Methode setTabSize(int size); die die Länge eines Tabs einstellt.
 

Zurück
Oben