JXTable Header Tooltipps

Steven

Mitglied
Morgen!

Ich bin gerade dabei, für meine JXTable Tooltipps für die Headerzeile zu erstellen und komm nicht weiter.

Gefunden habe ich:

Java:
tabelle = new JXTable(tabellenModel);
TableColumn c = tabelle.getColumnModel().getColumn(1);
MyTestRenderer myTestRenderer = new MyTestRenderer();
c.setHeaderRenderer(myTestRenderer);

wobei

Java:
public class MyTestRenderer extends DefaultTableCellRenderer {
	@Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
      if (value != null && value instanceof Object) {

    	  JXButton jbut = new JXButton();
    	  jbut.setText(String.valueOf(value));
    	  jbut.setToolTipText("Tool Tip Text for " + String.valueOf(value));
    	  return jbut;
      }
      return component;
    }
}

Funktioniert auch ganz nett: Diese eine Column hat einen Button als Header, welcher den Tooltipp anzeigt.

Problem: Damit geht mir leider die Sortierfähigkeit der JXTable verloren, da der Button nun kein "echter" JXTable-Header mehr ist. Einen anderen passenden Datentyp habe ich dafür leider nicht gefunden.

Habt ihr Ideen?

EDIT:

Die von mir gesuchte Klasse war JXTableHeader. Es bleibt das Problem, dass ich dort den Text nicht setzen kann; jetzt wird zwar der Tooltipp angezeigt, aber nicht die Beschriftung des Head.

Java:
public class MyTestRenderer extends DefaultTableCellRenderer {
	
	private static final long serialVersionUID = 1L;

	@Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      
		Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
      
		if (value != null && value instanceof Object) {
			
			JXTableHeader header = new JXTableHeader();
			
			// TODO irgendwie Text setzen
			
			header.setToolTipText("my tooltip");
			return header;
			
		}
		return component;
    }
}
 
Zuletzt bearbeitet:

ymene

Bekanntes Mitglied
Glaube deine Herangehensweise ist nicht ganz ideal. Du erzeugst immer einen neuen JXTableHeader, obwohl die Tabelle einen bereits vorhandenen TableHeader besitzt zu diesen Zeitpunkt, wodurch er sein ursprüngliches Value verliert. Auch die Abfrage:

Java:
 ... instanceof Object
ist nicht nötig, da jede Klasse von Object erbt, und das somit immer true ist.

Darüber hinaus wäre mir nicht bekannt, dass man die Header via TableCellRenderer setzt, aber vielleicht kannte ich diesen Weg bisher auch nicht. Jedoch gibt es einen guten Guide für Tabellen im Allgemeinen unter:

How to use Tables.

Dort wird auch beschrieben wie man TableHeader Tooltips setzt. Bin nicht ganz sicher, in wie weit das unterschiedlich sein wird bei der JXTable, aber ich vermute sehr ähnlich, wenn nicht gleich.

Grüße,
ymene
 

Steven

Mitglied
Ja das hab ich mir auch schon durchgelesen, allerdings hatte ich Probleme, es auf JXTables zu übertragen. Nevertheless, ich les mich nochmal ein. Deine Einwände sind alle berechtigt, hier noch schnell der neueste Stand:

Java:
public class TableHeaderTestRenderer extends DefaultTableCellRenderer {
	
	private static final long serialVersionUID = 1L;

	@Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

		TableColumnModel tableColumnModel =  new DefaultTableColumnModel();
			
			TableColumn tableColumn = new TableColumn();
			tableColumn.setHeaderValue("MyHeader");
			tableColumnModel.addColumn(tableColumn);
			
			JXTableHeader header = new JXTableHeader(tableColumnModel);
			
			header.setToolTipText("my tooltip");
			return header;
    }
}

Setzt den Tooltipp und den Text richtig, jedoch verschwindet der Pfeil neben dem Namen für das Sortieren (Feature der JXTable).
 

Steven

Mitglied
Ja Klasse, hattest Recht: Es ist auf JXTables übertragbar. Und das auch noch viel schöner, als ich es vor hatte:

Java:
protected String[] columnToolTips = {"foo","bar"}

tabelle = new JXTable(tabellenModel) 
		{
            //Implement table header tool tips. 
            protected JTableHeader createDefaultTableHeader() {
                return new JXTableHeader(columnModel) {
                    public String getToolTipText(MouseEvent e) {
                        java.awt.Point p = e.getPoint();
                        int index = columnModel.getColumnIndexAtX(p.x);
                        int realIndex = columnModel.getColumn(index).getModelIndex();
                        return columnToolTips[realIndex];
                    }
                };
            }
        };
 

Kleopatra

Mitglied
... weil JXTableHeader per-column toolTips unterstützt :) Dazu mußt Du nur die Eigenschaft toolTipText in der entsprechenden TableColumnExt setzen, entweder manuell oder in einer custom ColumnFactory.

Java:
// manuell
List<TableColumn> columns = table.getColumns(true);
forEach( column ...) {
    modelIndex = column.getModelIndex();
    ((TableColumnExt) column).setToolTipText(myArray[modelIndex);
}

// custom ColumnFactory

public class MyColumnFactory {

   @Override
    public void configureTableColumn(TableModel model, TableColumnExt columnExt) {
        super.configureTableColumn(...);
columnExt.setToolTipText(myArray(columnExt.getModelIndex()));
    }
   
}

JXTable table = new JXTable();
// erst factory setzen
table.setColumnFactory(new MyColumnFactory());
// dann model setzen 
table.setModel(myModel);

am besten natürlich einen intelligenteres Lookup als diesen array implementieren - wenn Du rigoros Identifier benutzt, sind diese prima geeignet, um ganz generell Eigenschaften nachzuschlagen. SwingLabs demos hat da ein Beispiel.

Viel Spaß
Jeanette
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Swing Wie JXTable importieren AWT, Swing, JavaFX & SWT 2
B Swing BalloonTip erscheint nicht in den ersten Zeilen einer JXTable AWT, Swing, JavaFX & SWT 4
B JXTable Invalid range Problem AWT, Swing, JavaFX & SWT 5
P Swing JXTable RowSorter AWT, Swing, JavaFX & SWT 12
B JXTable AWT, Swing, JavaFX & SWT 2
N Swing [JXTable] getColumnIndex mit dynamischen TableHeader AWT, Swing, JavaFX & SWT 4
martin82 Swing JXTable gefilterte Zeilen AWT, Swing, JavaFX & SWT 4
J Swing JXTable, vom CellRenderer gerendertes Value holen. AWT, Swing, JavaFX & SWT 5
A JXTable jede zweite Zeile einfärben AWT, Swing, JavaFX & SWT 4
G Frage zu SwingX JXTable und ColumnControl AWT, Swing, JavaFX & SWT 4
T JXTable AWT, Swing, JavaFX & SWT 5
I TIFF im CMYK-Farbmodell + mit dpi-Auflösung im Header erzeugen - wie? AWT, Swing, JavaFX & SWT 0
J CheckComboBox : Ausgewählte Items NICHT im Header anzeigen AWT, Swing, JavaFX & SWT 4
M Swing jFileChooser Header viewTypeDetails setFont AWT, Swing, JavaFX & SWT 0
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
L JTable Permanent Header AWT, Swing, JavaFX & SWT 0
N Swing JTable mit Sorter: Keine Sortierung bei Klick in Header AWT, Swing, JavaFX & SWT 3
V Swing JTable Row Header AWT, Swing, JavaFX & SWT 6
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
P Swing In JTable Header auch an der linken Seite AWT, Swing, JavaFX & SWT 2
S TableModel Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
V JTable Header L&F AWT, Swing, JavaFX & SWT 10
O Swing JTable Header AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
Spin JTable Header wird nicht angezeigt ohne ScrollPane AWT, Swing, JavaFX & SWT 3
A JTable Header AWT, Swing, JavaFX & SWT 3
G Swing JTable Header neu initialisieren? AWT, Swing, JavaFX & SWT 2
M Jframe wie bekommt man bei den zeile einen header erzeugen AWT, Swing, JavaFX & SWT 2
D Tabellen Header & Abstand der Zeilen AWT, Swing, JavaFX & SWT 8
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing 1spaltige JTable ohne Header AWT, Swing, JavaFX & SWT 18
R JTabel - Header AWT, Swing, JavaFX & SWT 2
R Swing TableRowSorter und Header Renderer AWT, Swing, JavaFX & SWT 2
hdi Swing JTable: SortKeys und Header Column Width AWT, Swing, JavaFX & SWT 5
C jtable checkbox in header / spaltenüberschrift AWT, Swing, JavaFX & SWT 4
hdi SWT JComboBox : Drop-Down Header ohne Eintrag AWT, Swing, JavaFX & SWT 6
F Swing JTable Header modifizieren AWT, Swing, JavaFX & SWT 13
M Problem mit funktionellem JTable Header AWT, Swing, JavaFX & SWT 5
D Swing JTable, Header und Leerzeilen AWT, Swing, JavaFX & SWT 3
A Swing Zeilenanzeige: JPanel als Header für JScrollPane AWT, Swing, JavaFX & SWT 7
R JTable Header - will links kleines icon hinzufuegen..? AWT, Swing, JavaFX & SWT 6
R Swing JScrollPane - Header AWT, Swing, JavaFX & SWT 6
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
C Swing JTable Header angelickt? AWT, Swing, JavaFX & SWT 4
eskimo328 JTable Zeilenumbruch im Header AWT, Swing, JavaFX & SWT 2
T 2JLabels in einen JTable Header AWT, Swing, JavaFX & SWT 2
S Browser ohne Header öffnen AWT, Swing, JavaFX & SWT 3
A Header abfragen, überprüfen AWT, Swing, JavaFX & SWT 23
D Sortierung beim Klicken auf Header einer JdbTable verhindern AWT, Swing, JavaFX & SWT 3
D Tabellen-Header anklickbar / auswählbar? AWT, Swing, JavaFX & SWT 5
A JTable Header + ScrollBar AWT, Swing, JavaFX & SWT 4
H JTable drucken mit Header AWT, Swing, JavaFX & SWT 4
G JTable und Header AWT, Swing, JavaFX & SWT 4
J JTable Zellen und Header AWT, Swing, JavaFX & SWT 2
P Tablle mit Zeilen Header (nicht spaltenheader) AWT, Swing, JavaFX & SWT 3
D jTable Header zweizeilig? AWT, Swing, JavaFX & SWT 2
W JTabel Header - Einfügen eines Textfeldes AWT, Swing, JavaFX & SWT 3
R JTable Mehrzeiliger Header zerstört JGoodies-Layout AWT, Swing, JavaFX & SWT 2
D JTable Header während Laufzeit ändern. AWT, Swing, JavaFX & SWT 3
D Jtable Header Höhe setzen ? AWT, Swing, JavaFX & SWT 2
D Header für den Row Header (JTable) AWT, Swing, JavaFX & SWT 2
O Probleme mit header von JTable AWT, Swing, JavaFX & SWT 6
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
D Mehrzeilige JTable Header AWT, Swing, JavaFX & SWT 2
N Jtable header fixieren AWT, Swing, JavaFX & SWT 2
L Header von ausgewählte Spalten ausgeben AWT, Swing, JavaFX & SWT 6
K Kein Header in JTable ! AWT, Swing, JavaFX & SWT 8
F Die JTable und ihr Header AWT, Swing, JavaFX & SWT 5
J JTable - Header über mehrere Spalten AWT, Swing, JavaFX & SWT 3
G JTable sortieren durch click im Header AWT, Swing, JavaFX & SWT 9
J Tabelle zeigt kein Header AWT, Swing, JavaFX & SWT 5
A Header bei JTabbed? AWT, Swing, JavaFX & SWT 3
J Border im Header bei JTable verändern AWT, Swing, JavaFX & SWT 3
S JTable Header AWT, Swing, JavaFX & SWT 5
K JTable - Header colspan AWT, Swing, JavaFX & SWT 7
K JTable header updated nicht immer AWT, Swing, JavaFX & SWT 5
A JTable - Header wird nicht angezeigt AWT, Swing, JavaFX & SWT 8
D JTable Header AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben