如何实现一个工具提示,当值太长时,会向我显示每个单元格的提示?
我只有一个表格渲染器,它为我设置一些单元格。所以我认为最简单的方法是在其中实现metod。
public class ColorRenderer extends DefaultTableCellRenderer {
final int STATUS_COL = 7;
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean
hasFocus,
int row, int col) {
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
int modelIndex = table.convertRowIndexToModel(row);
String type = (String) table.getModel().getValueAt(modelIndex, 7);
if ("".endsWith(type)) {
component.setBackground(table.getBackground());
component.setForeground(table.getForeground());
} else {
component.setBackground(Color.RED);
component.setForeground(Color.WHITE);
}
if (isSelected) {
setBackground(table.getSelectionBackground());
setForeground(table.getSelectionForeground());
}
return component;
}
}
提前谢谢。
答案 0 :(得分:0)
默认情况下,为表格单元格显示的工具提示文本由单元格的渲染器确定。但是,有时通过覆盖JTable的getToolTipText(MouseEvent)方法实现来指定工具提示文本会更简单,因此可以添加
setToolTipText(...);
在getTableCellRendererComponent
方法中,里面有真实的单元格值
所以你得到了
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
int modelIndex = table.convertRowIndexToModel(row);
String type = (String) table.getModel().getValueAt(modelIndex, 7);
if ("".endsWith(type)) {
component.setBackground(table.getBackground());
component.setForeground(table.getForeground());
} else {
component.setBackground(Color.RED);
component.setForeground(Color.WHITE);
}
if (isSelected) {
setBackground(table.getSelectionBackground());
setForeground(table.getSelectionForeground());
}
setToolTipText(...);
return component;
}
答案 1 :(得分:0)
首先覆盖getToolTipText(MouseEvent)
的{{1}}事件。
JTable
获取给定鼠标位置的单元格坐标...
public String getToolTipText(MouseEvent e) {
String toolTipText = null;
获取单元格的当前大小,这样我们就知道当前的约束是什么......
Point p = e.getPoint(); // MouseEvent
int col = columnAtPoint(p);
int row = rowAtPoint(p);
根据模型中单元格的当前值获取单元格的渲染器...
Rectangle bounds = getCellRect(row, col, false);
将渲染器组件的首选大小与单元格大小进行比较...
Object value = getValueAt(row, col);
Component comp = prepareRenderer(getCellRenderer(row, col), row, col);
返回工具提示......
if (comp.getPreferredSize().width > bounds.width) {
toolTipText = comp.getToolTipText();
}
答案 2 :(得分:0)
解决方案:
JTable auditTable = new JTable(){
public String getToolTipText(MouseEvent e) {
String toolTipText = null;
Point p = e.getPoint(); // MouseEvent
int col = columnAtPoint(p);
int row = rowAtPoint(p);
Component comp = prepareRenderer(getCellRenderer(row, col), row, col);
Rectangle bounds = getCellRect(row, col, false);
try {
//comment row, exclude heading
if (comp.getPreferredSize().width > bounds.width) {
toolTipText = getValueAt(row, col).toString();
}
} catch (RuntimeException e1) {
//catch null pointer exception if mouse is over an empty line
}
return toolTipText;
}
};