gpt4 book ai didi

java - JTable 中的 JPanel 中的工具提示不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:17 26 4
gpt4 key购买 nike

我有一个JTable。一列包含一个 JPanel,其中包含一些带有 ImageIconsJLabels。我已经创建了一个自定义单元格渲染器,除了 JLabel 上的工具提示外,一切正常。当我将鼠标悬停在任何这些 JLabel 上时,我需要显示该特定 JLabelTooltip。它没有显示 JLabel 的提示框。

这里是 CustomRenderer

private class CustomRenderer extends
DefaultTableCellRenderer implements TableCellRenderer {

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

if (value != null && value instanceof List) {

JPanel iconsPanel = new JPanel(new GridBagLayout());
List<ImageIcon> iconList = (List<ImageIcon>) value;
int xPos = 0;
for (ImageIcon icon : iconList) {
JLabel iconLabel = new JLabel(icon);
iconLabel.setToolTipText(icon.getDescription());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = 1;
gbc.gridx = xPos++;
iconsPanel.add(iconLabel, gbc);
}
iconsPanel.setBackground(isSelected ? table
.getSelectionBackground() : table.getBackground());
this.setVerticalAlignment(CENTER);
return iconsPanel;
}
return this;
}
}

最佳答案

问题是您在 CellRenderer 返回的组件的子组件上设置了工具提示。要执行您想要的操作,您应该考虑重写 JTable 上的 getToolTipText(MouseEvent e)。从事件中,您可以找到鼠标所在的行和列,使用:

java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);

然后您可以从那里重新准备单元格渲染器,找到哪个组件位于鼠标位置并最终检索其工具提示。

下面是您可以如何覆盖 JTable getToolTipText 的片段:

@Override
public String getToolTipText(MouseEvent event) {
String tip = null;
Point p = event.getPoint();

// Locate the renderer under the event location
int hitColumnIndex = columnAtPoint(p);
int hitRowIndex = rowAtPoint(p);

if (hitColumnIndex != -1 && hitRowIndex != -1) {
TableCellRenderer renderer = getCellRenderer(hitRowIndex, hitColumnIndex);
Component component = prepareRenderer(renderer, hitRowIndex, hitColumnIndex);
Rectangle cellRect = getCellRect(hitRowIndex, hitColumnIndex, false);
component.setBounds(cellRect);
component.validate();
component.doLayout();
p.translate(-cellRect.x, -cellRect.y);
Component comp = component.getComponentAt(p);
if (comp instanceof JComponent) {
return ((JComponent) comp).getToolTipText();
}
}

// No tip from the renderer get our own tip
if (tip == null) {
tip = getToolTipText();
}

return tip;
}

关于java - JTable 中的 JPanel 中的工具提示不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com