'Spezieller' Tooltip, wenn JTable-Column zu schmal

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Ich möchte eine Art Tooltip über ein JTable-Header erscheinen lassen.

Wenn die Maus über den Header fährt, soll ein Tolltip genau über der Überschrift des Column erscheinen, der dann die gesamte Überschrift darstellt, wenn die Column dafür zu schmal ist und der in ihr befindliche Text 'abgeschnitten' wurde.
 

André Uhres

Top Contributor
Code:
...
        ToolTipHeader header = new ToolTipHeader(table.getColumnModel());
        table.setTableHeader(header);
...
class ToolTipHeader extends JTableHeader {
    private final static Point NO_TIP = new Point(-2, -2);
    private Point toolTipLocation = NO_TIP;
    private HeaderRenderer renderer;

    public ToolTipHeader(final TableColumnModel model) {
        super(model);
        renderer = new HeaderRenderer();
        setDefaultRenderer(renderer);
    }

    public Point getToolTipLocation(final MouseEvent event) {
        return toolTipLocation;
    }

    public String getToolTipText(final MouseEvent event) {
        int column = columnModel.getColumnIndexAtX(event.getX());
        TableColumn aColumn = columnModel.getColumn(column);
        String tip = "";
        toolTipLocation = NO_TIP;
        Rectangle headerRect = getHeaderRect(column);
        JLabel label = (JLabel) renderer.getTableCellRendererComponent(
                getTable(), aColumn.getHeaderValue(), false, false, -1, column);
        if (headerRect.width <= label.getPreferredSize().width) {
            tip = aColumn.getHeaderValue().toString();
            toolTipLocation = headerRect.getLocation();
        }
        return tip;
    }

    class HeaderRenderer extends JLabel implements TableCellRenderer {

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
                boolean hasFocus, int row, int column) {
            setText(value.toString());
            setFont(table.getFont());
            setBorder(UIManager.getBorder("TableHeader.cellBorder"));
            setHorizontalAlignment(SwingConstants.CENTER);
            return this;
        }
    }
}
 

André Uhres

Top Contributor
kingston hat gesagt.:
..kann man das auch mit den einzelnen zellen der Tabelle machen?
Hier ist eine Möglichkeit:
Code:
       JTable table = new JTable() {
            private final Point NO_TIP = new Point(-2, -2); 
            private Point toolTipLocation = NO_TIP;

            @Override
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                JComponent c = (JComponent)super.prepareRenderer(renderer, row, column);
                String tip = "";
                toolTipLocation = NO_TIP; 
                Rectangle cellRect = getCellRect(row, column, true);
                if (cellRect.width <= c.getPreferredSize().width) {
                    tip = getValueAt(row, column).toString();
                    toolTipLocation = cellRect.getLocation();
                }
                setToolTipText(tip);
                return c;
            }

            @Override
            public Point getToolTipLocation(MouseEvent event) {
                return toolTipLocation;
            }
        };
 

kameit00

Neues Mitglied
Hallo,

das Thema ist schon etwas älter, aber ich konnte es gerade gut gebrauchen. Deshalb schreibe ich hier nochmal etwas dazu.

Ich habe den Code von André für mich angepasst, um ihn bequem anwenden zu können und habe ihn erweitert, so dass das Look&Feel der original Header der Tabelle benutzt wird.

An dieser Stelle nochmal vielen Dank an André für den Code!

Aufruf:
Java:
JTable table = new JTable();
TooltipHeaders.install(table);

Hier die Klasse:
Java:
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

/**
 * Tooltip on <code>JTable</code> columns.
 */

public class TooltipHeaders {

	/**
	 * JTableHeader implementation.
	 */
	@SuppressWarnings("serial")
	static class ToolTipHeader extends JTableHeader {

		/** Invisible location */
		private final static Point NO_TIP = new Point(-2, -2);

		/** Renderer of the original table, used as delegate */
		private final TableCellRenderer delegateRenderer;

		/** Tooltip location */
		private Point toolTipLocation;

		/**
		 * Constructor.
		 * 
		 * @param jtable
		 *            The table.
		 */
		ToolTipHeader(final JTable jtable) {
			super(jtable.getColumnModel());
			toolTipLocation = NO_TIP;
			delegateRenderer = jtable.getTableHeader().getDefaultRenderer();
			setDefaultRenderer(delegateRenderer);
		}

		/*
		 * (non-Javadoc)
		 * @see javax.swing.JComponent#getToolTipLocation(java.awt.event.MouseEvent)
		 */
		public Point getToolTipLocation(final MouseEvent event) {
			return toolTipLocation;
		}

		/*
		 * (non-Javadoc)
		 * @see javax.swing.table.JTableHeader#getToolTipText(java.awt.event.MouseEvent)
		 */
		public String getToolTipText(final MouseEvent event) {
			final int currentColumnIndex = columnModel.getColumnIndexAtX(event.getX());
			final Rectangle headerRect = getHeaderRect(currentColumnIndex);
			final TableColumn currentColumn = columnModel.getColumn(currentColumnIndex);
			final Object currentColumnHeader = currentColumn.getHeaderValue();
			final JLabel columnHeaderLabel = (JLabel) delegateRenderer.getTableCellRendererComponent(getTable(),
					currentColumnHeader, false, false, -1, currentColumnIndex);
			toolTipLocation = NO_TIP;
			String tip = "";
			// If string doesn't fit in column header
			if (headerRect.width <= columnHeaderLabel.getPreferredSize().width) {
				tip = currentColumnHeader.toString();
				toolTipLocation = headerRect.getLocation();
			}
			return tip;
		}
	}

	/**
	 * Install the <code>TooltipHeader</code> on the <code>JTable</code>.
	 * 
	 * @param table
	 *            The <code>JTable</code>.
	 */
	public static void install(JTable table) {
		table.setTableHeader(new ToolTipHeader(table));
	}
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Spezieller Button AWT, Swing, JavaFX & SWT 2
I Spezieller Knopf in Swing? Soll sein wie der Run in Eclipse. AWT, Swing, JavaFX & SWT 4
B Spezieller Cursor in Swing AWT, Swing, JavaFX & SWT 7
B Spezieller Button gesucht AWT, Swing, JavaFX & SWT 10
M Ganz spezieller Renderer für meinen JTree AWT, Swing, JavaFX & SWT 2
T Swing Tooltip-Delay funktioniert nicht immer. AWT, Swing, JavaFX & SWT 1
M JavaFX JAVAFX TreeItem mit Tooltip versehen AWT, Swing, JavaFX & SWT 4
M JavaFX Tooltip bei setOnMouseMoved Verständnisproblem AWT, Swing, JavaFX & SWT 6
V JFreeChart: Tooltip auf Knopfdruck anzeigen AWT, Swing, JavaFX & SWT 2
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
M Datenbanksätze in ToolTip laden AWT, Swing, JavaFX & SWT 4
Tom299 JavaFX Tooltip verbuggt? AWT, Swing, JavaFX & SWT 1
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
U drawLine mit Tooltip AWT, Swing, JavaFX & SWT 1
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
B JavaFX Tooltip auf ImageView AWT, Swing, JavaFX & SWT 6
U Tooltip Dauer setzen AWT, Swing, JavaFX & SWT 0
U ToolTip Größenänderung, passt sich erst beim zweiten Mal an AWT, Swing, JavaFX & SWT 6
F ToolTip mit Link zum anklicken AWT, Swing, JavaFX & SWT 2
S SWT: Drop-Down Menü-Einträge mit Tooltip hervorheben AWT, Swing, JavaFX & SWT 3
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
GianaSisters Swing jComboBox Tooltip funktioniert nicht AWT, Swing, JavaFX & SWT 17
6 ToolTip erzwingen AWT, Swing, JavaFX & SWT 6
R SWT Tooltip AWT, Swing, JavaFX & SWT 5
J jList, recht Maustast => Tooltip zu Element AWT, Swing, JavaFX & SWT 8
T Tooltip bei falscher Eingabe anzeigen AWT, Swing, JavaFX & SWT 2
hdi Problem mit ToolTip: Aussehen/Verzögerung AWT, Swing, JavaFX & SWT 7
P Tooltip "erzwingen" ? AWT, Swing, JavaFX & SWT 7
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
Antoras Swing Tooltip permanet anzeigen AWT, Swing, JavaFX & SWT 5
W Verzögerung à la Tooltip bei mouseEntered AWT, Swing, JavaFX & SWT 19
G Tooltip anzeigen AWT, Swing, JavaFX & SWT 4
GilbertGrape scrollable Tooltip AWT, Swing, JavaFX & SWT 9
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
GilbertGrape JTable+Tooltip+Zeilenumbrüche AWT, Swing, JavaFX & SWT 7
M Tooltip anzeigen? AWT, Swing, JavaFX & SWT 3
J Anzeigedauer eines Tooltip? AWT, Swing, JavaFX & SWT 5
S Tooltip Frage AWT, Swing, JavaFX & SWT 3
P JRE 6 -> ToolTip & mnemonic Anzeige AWT, Swing, JavaFX & SWT 4
G Tooltip Zeilenumbruch AWT, Swing, JavaFX & SWT 13
B ToolTip verändern / selbst gestalten AWT, Swing, JavaFX & SWT 3
F ToolTip auf Canvas AWT, Swing, JavaFX & SWT 2
S Tooltip auf Toolbar-Icon AWT, Swing, JavaFX & SWT 6
C Tooltip nur anzeigen, wenn JInternalFrame minimiert AWT, Swing, JavaFX & SWT 3
D Eigenes Tooltip AWT, Swing, JavaFX & SWT 5
M JTree: Tooltip wenn Text nicht vollständig angezeigt wird AWT, Swing, JavaFX & SWT 3
M Seltsames Verhalten Tooltip und JDialog AWT, Swing, JavaFX & SWT 8
I JTable, Tooltip, HTML AWT, Swing, JavaFX & SWT 2
S ToolTip an Mausposition anzeigen AWT, Swing, JavaFX & SWT 5
O Hintergrundfarbe beim ToolTip AWT, Swing, JavaFX & SWT 5
L JLabel als Tooltip AWT, Swing, JavaFX & SWT 3
G Tooltip aufpoppen lassen AWT, Swing, JavaFX & SWT 3
M Border in ToolTip AWT, Swing, JavaFX & SWT 5
F ToolTip über Line2D bzw. Rectangle2D AWT, Swing, JavaFX & SWT 5
R JTable: Jede Zelle mit eigenem ToolTip belegen AWT, Swing, JavaFX & SWT 5
G Tooltip sperrt MouseListener? AWT, Swing, JavaFX & SWT 6
V Tooltip Text auf Spaltenkopf (JTable) AWT, Swing, JavaFX & SWT 4
S Tooltip auf Kopf eine JTable? AWT, Swing, JavaFX & SWT 2
G ToolTip AWT, Swing, JavaFX & SWT 4
W Bei hinzufügen der Action verliert Button Text,Tooltip, etc AWT, Swing, JavaFX & SWT 5
S Tooltip mit Grafik AWT, Swing, JavaFX & SWT 2
N lightweight bei ToolTip AWT, Swing, JavaFX & SWT 2
kaory Variabler ToolTip-Text in JTable AWT, Swing, JavaFX & SWT 5
T ToolTip AWT, Swing, JavaFX & SWT 3
R ToolTip länger aufrecht erhalten AWT, Swing, JavaFX & SWT 3
S ToolTip erweitern bei Swing (Mehrzeilig) AWT, Swing, JavaFX & SWT 2
M Tooltip / neues Fenster AWT, Swing, JavaFX & SWT 6
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
VPChief Buttons Reagieren erst wenn ich Fenster minimiere AWT, Swing, JavaFX & SWT 4
Cromewell JavaFX ImageView vergößern wenn hovered AWT, Swing, JavaFX & SWT 2
Drachenbauer Hauptfenster erhält schmale Streifen rechts unt unten, wenn ich einen JDialog hinzufüge. AWT, Swing, JavaFX & SWT 19
ralfb1105 JavaFX ProgressIndicator Meldung wenn Task failed AWT, Swing, JavaFX & SWT 5
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
richis-fragen JTree +/- verschwidet wenn Knoten keine Kinder hat... AWT, Swing, JavaFX & SWT 6
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
J Event Handling Button "enablen" wenn Eingaben in Textfeldern korrekt sind AWT, Swing, JavaFX & SWT 1
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
E [JavaFX]Wenn felder belegt dann Meldung Verwerfen? AWT, Swing, JavaFX & SWT 2
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben