Hallo Leute,
nachdem mich die Forensuche und google auch nicht schlauer gemacht haben, belästige ich nun euch mit meinem Problem.
Ich habe in meiner Anwendung eine JTable mit mehreren Spalten und Zeilen. Über meinen eigenen TableCellRenderer weise ich allen Zellen einen ToolTipText zu (ganz profan: der Text der entsprechenden Zelle). Nun das große ABER: Ich möchte, dass der ToolTipText nur dann angezeigt wird, wenn der Text nicht in die Zelle passt (also mit den drei Pünktchen abgekürzt wird).
Dafür habe ich in meinem TableCellRenderer die Methode getToolTipText(MouseEvent event) überschrieben, um hier abzufragen, ob die eigentlich benötigte Breite der Zelle größer ist als die tatsächliche Breite. Funzt aber nicht. Die Table wird wunderbar angezeigt, aber egal, über welcher Zelle meine Maus verweilt, der entsprechende ToolTipText wird immer angezeigt. Über einen println kann ich sehen, dass getPreferredSize().width ganz brav die benötigte Breite abhängig vom Text liefert. Aber getWidth(), mit dem ich die tatsächliche Zellenbreite in Erfahrung bringen wollte, liefert immer 0.
Ich habe ein kleines KSKB zusammengestrickt; vielleicht mag da ja mal jemand reinschauen. Die Methode getToolTipText ist ganz am Ende (und ich auch...).
nachdem mich die Forensuche und google auch nicht schlauer gemacht haben, belästige ich nun euch mit meinem Problem.
Ich habe in meiner Anwendung eine JTable mit mehreren Spalten und Zeilen. Über meinen eigenen TableCellRenderer weise ich allen Zellen einen ToolTipText zu (ganz profan: der Text der entsprechenden Zelle). Nun das große ABER: Ich möchte, dass der ToolTipText nur dann angezeigt wird, wenn der Text nicht in die Zelle passt (also mit den drei Pünktchen abgekürzt wird).
Dafür habe ich in meinem TableCellRenderer die Methode getToolTipText(MouseEvent event) überschrieben, um hier abzufragen, ob die eigentlich benötigte Breite der Zelle größer ist als die tatsächliche Breite. Funzt aber nicht. Die Table wird wunderbar angezeigt, aber egal, über welcher Zelle meine Maus verweilt, der entsprechende ToolTipText wird immer angezeigt. Über einen println kann ich sehen, dass getPreferredSize().width ganz brav die benötigte Breite abhängig vom Text liefert. Aber getWidth(), mit dem ich die tatsächliche Zellenbreite in Erfahrung bringen wollte, liefert immer 0.
Ich habe ein kleines KSKB zusammengestrickt; vielleicht mag da ja mal jemand reinschauen. Die Methode getToolTipText ist ganz am Ende (und ich auch...).
Java:
public class Tabelle
{
private static final String[] COLUMN_HEADER = {"A", "B"};
private JTable table;
private DefaultTableModel tableModel;
private String[][] data = new String[][]{{"1", "Kurzer Text"},
{"2", "Laaaaaaaaaaaaaaaaaaaaaaaaanger Text"}};
public static void main(final String[] args)
{
new Tabelle();
}
public Tabelle()
{
JFrame frame = new JFrame( "Demo" );
frame.getContentPane().add(new JScrollPane(getTable()));
frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
public JTable getTable()
{
if (table == null)
{
table = new JTable(getTableModel())
{
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int x, int y)
{
return false;
}
};
table.getColumnModel().getColumn(0).setCellRenderer(new MyTableCellRenderer());
table.getColumnModel().getColumn(1).setCellRenderer(new MyTableCellRenderer());
}
return table;
}
public DefaultTableModel getTableModel()
{
if (tableModel == null)
{
tableModel = new DefaultTableModel(data, COLUMN_HEADER);
}
return tableModel;
}
private static class MyTableCellRenderer extends JLabel implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus,
final int row, final int column)
{
setText(value.toString());
setOpaque(true);
setToolTipText(value.toString());
return this;
}
public String getToolTipText(MouseEvent event)
{
System.out.println("PrefSize: " + getPreferredSize().width + ", width: " + getWidth());
return getPreferredSize().width > getWidth() ? super.getToolTipText(event) : null;
}
}
}