Column Breite in JTable automatisch an Inhalt anpassen

Status
Nicht offen für weitere Antworten.

zd

Bekanntes Mitglied
Hi,
ich habe folgendes Problem:
Ich habe einen JTable der mit Inhalten einer Datenbank gefüllt wird.
Die Breite der Column soll automatisch an die Breite der breitesten Zelle aus einer Column angepasst werden (zumindest bis zu einer vordefinierten maximalen Breite).

Also nochmal ein Beispiel zur verdeutlichung:
MaxBreite = 200.
In Column A ist die breiteste Zelle 60 breit. Breite wird auf 60 gesetzt.
In Column B ist die breiteste Zelle 220 breit. Breite wird auf 200 gesetzt.

Soweit ist das nicht so schwierig, ich mach das in meinem CellRenderer:
Code:
class TableRenderer extends JLabel implements TableCellRenderer {
	private static final int maxWidth = 200;
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		if (value != null) {
			setText(value.toString());
			int width = getPreferredSize().width; // breite des labels der aktueller zelle
			if (width > maxWidth) width = maxWidth; // falls größer als maxwidth auf maxwidth setzen
			if (table.getColumnModel().getColumn(column).getPreferredWidth() < width) { // falls spalte bis jetzt schmaler ist breiter machen
				table.getColumnModel().getColumn(column).setPreferredWidth(width);
			}
		} 
		// ...	
		return this;
   }
}
Funktioniert bis jetzt einwandfrei.
Jetzt soll der Benutzer aber natürlich die Möglichkeit haben, eine Spalte schmaler zu machen. D.h. die oben angegebenen Sachen sollen nur einmal nach dem Initialisieren des JTables ausgeführt werden, danach nicht mehr.
Momentan kann ich eine Spalte zwar schmaler ziehen, sie "hüpft" dann aber zurück auf ihre Ausgangsbreite.
Ich hoffe ich habe mich einigermassen verständlich ausgedrückt, bei Unklarheiten bitte einfach nachfragen.
Hat jemand eine Idee wie ich das umsetzen könnte (Table-experte Beni? ;))
Danke
 

Sky

Top Contributor
Event (Spaltenbreite wurde geändert) fangen und Spalte merken. Für diese Spalte gilt o. g. Behandlung von Spaltenbreitenvergrößerungen nicht angewendet.
 

zd

Bekanntes Mitglied
Danke für die Antwort, ich probiere grad damit rum.
Hast du dabei ein spezielles Event im Kopf?
Was ich dazu gefunden habe ist das folgende:
Code:
sqlTable.getColumnModel().addColumnModelListener(	new TableColumnModelListener() {
	public void columnMarginChanged(ChangeEvent e) {
		 // column resize detected
	}
});
Das hilft mir aber leider auch nicht, weil dabei kein unterschied gemacht wird, ob der Resize von nem User oder vom Programm selber ausgeführt wurde.
Irgendne Idee?
Danke
 

zd

Bekanntes Mitglied
Ok, ich habs hingekriegt. Zwar etwas häßlicher workaround, aber immerhin funktionierts.
boolean resize, der am Anfang true ist, die Größe wird nur geändert wenn der gesetzt ist.

Code:
if (resize) {
	if (width > maxWidth) width = maxWidth;
	if (table.getColumnModel().getColumn(column).getPreferredWidth() < width) {
		table.getColumnModel().getColumn(column).setPreferredWidth(width);
	}
}
resize wird auf false gesetzt sobald ein mouseDragged auf dem TableHeader festgestellt wird:
Code:
sqlTable.getTableHeader().addMouseMotionListener(new MouseMotionAdapter() {
	public void mouseDragged(MouseEvent e) {
		resize = false;
	}
});
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX TableView Column Sortierung AWT, Swing, JavaFX & SWT 1
robinab JavaFX TableView column resize nach setItems() AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
L Swing JTable refresht die Column Namen nicht AWT, Swing, JavaFX & SWT 0
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
N JavaFX TreeTableView & Column Span AWT, Swing, JavaFX & SWT 5
S Java FX TableView disable Column AWT, Swing, JavaFX & SWT 4
E JavaFX ScrollBar in TableView bei Column Resize AWT, Swing, JavaFX & SWT 2
S Swing JTable Column Width adjustment AWT, Swing, JavaFX & SWT 3
V jtable column AWT, Swing, JavaFX & SWT 5
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
hdi Swing JTable: SortKeys und Header Column Width AWT, Swing, JavaFX & SWT 5
A SWT Group und Column mit Resize ändern AWT, Swing, JavaFX & SWT 5
D Swing JTable move Column dnd Idx1 --> Idx2 AWT, Swing, JavaFX & SWT 2
R JTable mit Column die Icon und Integer enthält? AWT, Swing, JavaFX & SWT 3
R Zu selektiertem Column in JTable scrollen? AWT, Swing, JavaFX & SWT 2
S JTable Float Column fuegt automatisch Punkt hinzu wenn man Zahlen eingibt. AWT, Swing, JavaFX & SWT 21
G 'Spezieller' Tooltip, wenn JTable-Column zu schmal AWT, Swing, JavaFX & SWT 6
R JTable: Column Titel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
S Frage zu Table(Column)Model AWT, Swing, JavaFX & SWT 3
G Keine Column-Names in JTable und Probleme mit getValueAt AWT, Swing, JavaFX & SWT 9
G ColumnHeader und Column-Indizes AWT, Swing, JavaFX & SWT 4
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
G JavaFX - bugs bei der ermittlung der breite der nodes AWT, Swing, JavaFX & SWT 3
G Rectangle Breite richtet such an die Breite vom Text AWT, Swing, JavaFX & SWT 1
R Java FX - Fxml - relative Größenangaben für Breite und Höhe einer TextArea AWT, Swing, JavaFX & SWT 8
C JavaFX TableColumn - TableColumn Breite AWT, Swing, JavaFX & SWT 8
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
A trotz setSize keine breite AWT, Swing, JavaFX & SWT 4
M Wie ermittele ich die Breite und Höhe meines Displays in Pixel AWT, Swing, JavaFX & SWT 3
K JSpinner in passender Breite erstellen oder automatisch anpassen AWT, Swing, JavaFX & SWT 2
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
S JTable Spalte "normale" Breite? AWT, Swing, JavaFX & SWT 5
N Swing Optimale Höhe eine JTextPanes bei festgelegter Breite bestimmen AWT, Swing, JavaFX & SWT 23
L TreeViewerColumn - gesamte TreeView-breite nutzen? AWT, Swing, JavaFX & SWT 5
M 2 Buttons mit derselben Breite AWT, Swing, JavaFX & SWT 9
4 Shapes Informationen wie Breite usw. mitgeben AWT, Swing, JavaFX & SWT 5
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ Swing JComboBox | Breite des Scrollbalkens AWT, Swing, JavaFX & SWT 4
D JFreeChart Breite (width) ändern AWT, Swing, JavaFX & SWT 6
Rudolf Swing Swing Button breite stanardisieren AWT, Swing, JavaFX & SWT 2
N Swing JPanel Nur Breite festlegen AWT, Swing, JavaFX & SWT 7
M breite eines "drawString()-Strings" AWT, Swing, JavaFX & SWT 2
F JTabbedPane Reiter breite AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Problem mit höhe||breite eines JFrames AWT, Swing, JavaFX & SWT 4
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
H SWT Breite von componenten zu bestimmen AWT, Swing, JavaFX & SWT 2
S JSlider Track Breite und Farbe AWT, Swing, JavaFX & SWT 2
N breite von JList festlegen AWT, Swing, JavaFX & SWT 3
E Layoutmanager mit fester Breite gesucht AWT, Swing, JavaFX & SWT 9
reibi SWT Breite Taskleiste herausfinden AWT, Swing, JavaFX & SWT 2
C Breite JTextArea/JScrollPane setzen AWT, Swing, JavaFX & SWT 4
S Swing JTable: Spalten mit relativer Breite im ungleichmäßigen Verhältnis AWT, Swing, JavaFX & SWT 2
M Swing JTable + JScrollPane (Breite und Höhenproblem) AWT, Swing, JavaFX & SWT 1
S Für Breite und Höhe werden 0.0 angezeigt AWT, Swing, JavaFX & SWT 2
C Swing JTextArea mit fester Breite und angepasster Höhe??? AWT, Swing, JavaFX & SWT 8
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
D JtoolBar feste Breite ? AWT, Swing, JavaFX & SWT 13
P Breite und Höhe des contentPane abfragen AWT, Swing, JavaFX & SWT 3
Y Einzigartigkeit des GridBagLayout - individuelle Höhe/Breite AWT, Swing, JavaFX & SWT 4
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
T Breite des Containers ist gegeben - wie die Höhe berechnen? AWT, Swing, JavaFX & SWT 3
V Swing: Konstant breite Sidebar AWT, Swing, JavaFX & SWT 2
D Breite eines JScrollPane AWT, Swing, JavaFX & SWT 3
B Feste Breite einer JTextPane, die HTML anzeigt AWT, Swing, JavaFX & SWT 8
G JMenu problem mit der Breite von einer JCheckBox AWT, Swing, JavaFX & SWT 2
A JTextFiled-Breite und Höhe ändern AWT, Swing, JavaFX & SWT 3
B horizontale bzw. vertikale JScrollBar breite von JScrollPane AWT, Swing, JavaFX & SWT 5
S JTable - Breite der Linien AWT, Swing, JavaFX & SWT 8
D GridBagLayout: 2. Spalte auf JPanel-Breite expandieren AWT, Swing, JavaFX & SWT 2
S Feste Breite und Höhe für einen formatierten Text. AWT, Swing, JavaFX & SWT 5
F JTable: Spaltenbreiten an Breite der Zelleninhalte anpassen AWT, Swing, JavaFX & SWT 5
lhein Breite der Scrollbar in einer Combobox ändern AWT, Swing, JavaFX & SWT 5
G Klasse Image - Höhe und Breite ermitteln AWT, Swing, JavaFX & SWT 12
R Breite von JTextField in einem GridBagLayout begrenzen AWT, Swing, JavaFX & SWT 3
P Breite eines JScrollbar vergrößern, aber wie? AWT, Swing, JavaFX & SWT 8
B JEditorPane: Höhe für bestimmte Breite bestimmen AWT, Swing, JavaFX & SWT 4
K JTextfield - breite AWT, Swing, JavaFX & SWT 3
S JPanel in JScrollPane in der Breite begrenzen AWT, Swing, JavaFX & SWT 3
K Höhe und Breite eines Panels im GridBagLayout ermitteln AWT, Swing, JavaFX & SWT 9
M Breite veraendern zwischen 2 JPanels AWT, Swing, JavaFX & SWT 2
D JLabel mit fester Breite und beliebiger Höhe AWT, Swing, JavaFX & SWT 4
L wie kann man die Höhe und Breite von JList festlegen AWT, Swing, JavaFX & SWT 3
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14

Ähnliche Java Themen

Neue Themen


Oben