gpt4 book ai didi

java - JTable 中的 JPanel 获得鼠标单击的焦点,但鼠标悬停时不获得焦点

转载 作者:行者123 更新时间:2023-12-02 07:49:03 25 4
gpt4 key购买 nike

我有一个表,其中一列包含 JPanel。我已经编写了自定义渲染器和编辑器,它们工作得很好。但是,该面板包含一个带有工具提示的 JLabel 组件。如果我单击单元格并将鼠标悬停在标签上,则会显示工具提示,但如果我将鼠标移入单元格并将鼠标悬停在 JLabel 上,则不会显示工具提示。我已向表格添加了一个鼠标监听器,如下所示,我在其中获取 Panel 对象并尝试使其具有焦点。

public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
int row = table.rowAtPoint(p);
int column = table.columnAtPoint(p);
System.out.println(row + " " + column);
Object o = table.getModel().getValueAt(row, column);
if (o instanceof FileInfoCellPanel) {
FileInfoCellPanel ficp = (FileInfoCellPanel)o;
ficp.requestFocusInWindow();
//ficp.revalidate();
}
}

我确实得到了正确的 JPanel 对象,但它似乎从未获得焦点。因此,单击单元格似乎会将焦点集中到面板上,但移动鼠标却不会。

最佳答案

如果您只想在工具提示中显示文本,则在渲染器返回的组件上设置工具提示就足够了。如果您查看我在下面复制的 JTable#getTooltipText 方法的实现,就可以看出这一点

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);

// Now have to see if the component is a JComponent before
// getting the tip
if (component instanceof JComponent) {
// Convert the event to the renderer's coordinate system
Rectangle cellRect = getCellRect(hitRowIndex, hitColumnIndex, false);
p.translate(-cellRect.x, -cellRect.y);
MouseEvent newEvent = new MouseEvent(component, event.getID(),
event.getWhen(), event.getModifiers(),
p.x, p.y,
event.getXOnScreen(),
event.getYOnScreen(),
event.getClickCount(),
event.isPopupTrigger(),
MouseEvent.NOBUTTON);

tip = ((JComponent)component).getToolTipText(newEvent);
}
}

// 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/10454304/

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