ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
3692
3692
EMPFEHLEN
-
20.05.04 18:25 #1
- Registriert seit
- Feb 2004
- Beiträge
- 28
Hallo!
Ich habe eine Tabelle, bei der die Spalten am Anfang eine bestimmte Breite haben. Die Inhalte der Spalten können am Anfang oft nicht komplett dargestellt werden, das ist soweit OK.
Ist es jetzt möglich die Tabelle so zu definieren, daß wenn man auf den Strich zwischen zwei Spalten doppelklickt, die jeweilige Spalte dann auf die Breite geht, die zur kompletten Darstellung der Spalte benötigt wird?
Ist etwas blöd erklärt, ich weiß, ich will halt einfach die Tabelle so haben,, daß man eine Spalte per Doppelklick größer machen kann, so wie es bei verschiedenen Tabellenkalkulationen der Fall ist.
-
Das gibts bestimmt, ist aber Fummelei, den Mausklick zu behandeln.Original geschrieben von ich_Schmiddy
Hallo!
Ich habe eine Tabelle, bei der die Spalten am Anfang eine bestimmte Breite haben. Die Inhalte der Spalten können am Anfang oft nicht komplett dargestellt werden, das ist soweit OK.
Ist es jetzt möglich die Tabelle so zu definieren, daß wenn man auf den Strich zwischen zwei Spalten doppelklickt, die jeweilige Spalte dann auf die Breite geht, die zur kompletten Darstellung der Spalte benötigt wird?
Ist etwas blöd erklärt, ich weiß, ich will halt einfach die Tabelle so haben,, daß man eine Spalte per Doppelklick größer machen kann, so wie es bei verschiedenen Tabellenkalkulationen der Fall ist.
Wie wäre es mit dieser Implementierung, die für alle Spalten die Breiten optimiert? (Einzubauen in Deiner von JTable abgeleiteten Klasse)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
/** * Setzt für alle Spalten die optimale Spaltenbreite. * */ void sizeColumnsOptimal() { Point upperRow = null; Point lowerRow = null; // Bestimme die Anzahl der zu optimierenden Spalten. int optimizingColumns = getColumnCount(); // Die verbrauchte Gesamtbreite int usedWidth = 0; for (int index = 0; index < optimizingColumns; index++) { // Bestimme die zu optimierenden Zeilen int fromRow = 0; int toRow = getRowCount(); usedWidth += sizeColumnOptimal(index, fromRow, toRow); } // for 0..columnCount // Wenn die letzte Spalte nicht optimiert worden ist if (optimizingColumns < getColumnCount() && getColumnCount() >= 0 && getScrollPane() != null && getScrollPane().getViewport() != null) { // Ermittle die zur Verfügung stehende Breite int useableWidth = getScrollPane().getViewport().getWidth(); // Setze die letzte Spalte auf die verbleibende Breite int remainingWidth = Math.max(0, useableWidth - usedWidth); TableColumn column = getColumnModel().getColumn(getColumnCount() - 1); column.setPreferredWidth(remainingWidth); column.setWidth(remainingWidth); } } /** * Stellt für eine Spalte eine optimale Breite ein * @param index der Index der Spalte * @param fromRow die erste zu optimierende Zeile * @param toRow die letzte zu optimierende Zeile * @return die ermittelte Breite */ public int sizeColumnOptimal(int index, int fromRow, int toRow) { TableColumn col = getColumnModel().getColumn(index); int prefSize = 0; if (col.getHeaderRenderer() != null) { prefSize = col .getHeaderRenderer() .getTableCellRendererComponent( null, col.getHeaderValue(), false, false, 0, 0) .getPreferredSize() .width; } else { prefSize = getDefaultRenderer(String.class) .getTableCellRendererComponent( this, col.getHeaderValue(), false, false, 0, 0) .getPreferredSize() .width; } for (int rowIndex = fromRow; rowIndex < toRow; rowIndex++) { prefSize = Math.max( prefSize, getCellRenderer(rowIndex, index) .getTableCellRendererComponent( this, getValueAt(rowIndex, index), false, false, rowIndex, index) .getPreferredSize() .width); } // Für die Optik prefSize += getIntercellSpacing().width; col.setPreferredWidth(prefSize); col.setWidth(prefSize); return prefSize; }
-
23.05.04 13:36 #3
- Registriert seit
- Feb 2004
- Beiträge
- 28
Vielen Dank für den Tip
EIgentlich eine gute Idee, aber das Problem ist halt: manche Spalten sind sehr breit und sie sollen nur in der vollen breite angezeigt werden, wenn der Benutzer das wirklich will, nicht immer...
-
21.12.04 09:35 #4Das wäre das, was ich gebrauchen könnte, allerdings habe ich ein prob bei der Implementierung. Ich benutze den Visual Editor für Eclipse.
Zitat von Snape
Warum frägst Du in der von JTable abgeleiteten Klasse (in meinem Fall MyTable.java) getScrollPane ab? Das gibt's bei mir gar nicht in der Klasse, wenn dann nur in der Klasse, wo die Tabelle reinkommt. Steh ich auf dem Schlauch, oder wie kann ich mir das sonst erklären?
Danke
Der nette Mannadioz - La Ultima Tour 2004
Viva Los Tioz
-
Sorry, da habe ich wohl etwas vergessen.
Zitat von Der nette Mann

Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
/** * Liefert die ScrollPane, in der diese Tabelle liegt */ JScrollPane getScrollPane() { Container cont = getParent(); while (cont != null && !(cont instanceof JScrollPane)) { cont = cont.getParent(); } return (JScrollPane) cont; }
-
21.12.04 12:04 #6
Hab mich schon gewundert
Hab Dein Code etwas umgeschrieben und es funktioniert bei mir ganz wunderbar. Genauso sollte das aussehen.
Vielen Dank für diesen Tipp (auch wenn er schon etwas älter war
das suchen hat sich somit gelohnt)
Grüße
Der nette Mannadioz - La Ultima Tour 2004
Viva Los Tioz
-
Prima. Was hast Du geändert? Etwas das ich wissen sollte?
Zitat von Der nette Mann
Prima.Vielen Dank für diesen Tipp (auch wenn er schon etwas älter war
das suchen hat sich somit gelohnt)
Grüße
Der nette Mann
-
21.12.04 13:27 #8
Och, ich hab eigentlich nix weltbewegendes geändert. Ich hab die Breite der Spalten angepasst ohne dass ich auf die darunterliegende ScrollPane Rücksicht genommen habe.
Die Schleifen über die Spalten hab ich auch gemacht und mir dann die Werte der Breite über den Funktionsaufruf sizeColumnOptimal geholt.
Wie gesagt, hab genau das gewünschte Ergebnis
Gruß
Der nette Mannadioz - La Ultima Tour 2004
Viva Los Tioz
Ähnliche Themen
-
CSS, breite der Tabelle und Spalten?
Von 0Byte im Forum CSSAntworten: 1Letzter Beitrag: 08.02.09, 10:58 -
3 Spalten tabelle breite 2 Spalten Fest 1 dynamisch
Von mrno im Forum CSSAntworten: 2Letzter Beitrag: 28.06.08, 00:24 -
CSS: 3 Spalten: Breite des Content-bereichs
Von quirk im Forum CSSAntworten: 6Letzter Beitrag: 07.12.07, 14:57 -
Tabelle - Breite bei 3 Spalten
Von Alaniel im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 19.07.04, 15:16





Zitieren
Login





