gpt4 book ai didi

java - 计算鼠标悬停时的工具提示而不是加载表格

转载 作者:行者123 更新时间:2023-11-30 06:27:10 24 4
gpt4 key购买 nike

我正在创建一个 Swing 表单元格渲染器,它应该将图像显示为工具提示。这是基本实现:

  1. 图像存储在文件服务器上并使用文档管理系统进行管理。我们使用一种方法使用其唯一的文档 ID 来检索这些文件。这部分不能更改。

  2. 创建一个包含图像 Id 和 File 对象的 HashMap

  3. 渲染器检查图像Id是否包含在HashMap中。如果是,将从 HashMap 加载图像。如果没有,则应下载图像。

这是渲染器方法:

@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
zebraPainter.paint(table, value, isSelected, hasFocus, row, column, this, false);
if (value != null) {
@SuppressWarnings({ "rawtypes", "unchecked" })
T bo = (T) (((DefaultBOTableModel) table.getModel()).getBusinessObject(row));
if (bo.getImageLink() != null) {
setToolTipText(getImageFile(bo.getImageLink()));
} else {
setToolTipText(null);
}
}
return this;
}

T 是存储在 JTable 中的通用对象。

这是生成工具提示 HTML 的方法

private String getImageFile(final Integer documentId) {
if (documentId != null) {
final DocumentService docService = ResourceManager.get(DocumentService.class);

// check whether the document is already stored in imageMap. Use this if yes, download the image
// and put in the map if no.
File image = imageMap.get(documentId);
if (image == null) {
File myImage = docService.retrieveDocumentFile(new KeyObject(documentId, -1));
imageMap.put(documentId, myImage);
image = imageMap.get(documentId);

}

// URL of the image.
URL url;
try {
url = image.toURI().toURL();
} catch (MalformedURLException e) {
throw new MespasRuntimeException("Error generating image tooltip", e);
}

return "<html><img src='" + url + "'/></html>";
} else {
return null;
}
}

这工作得很好。但是,由于我们的表格可能会变得非常大(可以一次显示 10'000 个项目,这是无法更改的)并且用户并不总是拥有最好的互联网连接,这给我带来了以下问题:

用于创建 HTML 工具提示的图像会在填充表格时下载。

我怎样才能以一种时尚的方式改变这个方法

getImageFile()

仅当我在单元格上执行鼠标悬停以确保仅下载实际正在观看的图像时才调用?

最佳答案

您需要 addMouseMotionListener 来检测鼠标何时悬停在图像上,然后您应该访问存储在单元格上的通用对象以获取调用 getImageFile() 的链接.

第一个进程需要 mouseMoved 内的条件来仅计算从单元格到另一个单元格的移动(不在单元格内部)。

第二个需要将单元格作为 JComponent 访问,以便能够设置工具提示图像。:

public static int rowh, colh;//global 
...

table.addMouseMotionListener(new MouseAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
int row = table.rowAtPoint(e.getPoint());
int col = table.columnAtPoint(e.getPoint());

if (rowh != row || colh != col) { //movements from cell to cell inside the table.
rowh = row;
colh = col;
Object value = table.getModel().getValueAt(row, col);//get your Object value

TableCellRenderer cellRenderer = table.getCellRenderer(row, col);
Component rendererComponent = cellRenderer.getTableCellRendererComponent(table, null, false, true, row, col);
JComponent jcomp = (JComponent)rendererComponent;

//set the toolTip as you want.
T bo = (T) (((DefaultTableModel) table.getModel()).getBusinessObject(row));
if (bo.getImageLink() != null) {
jcomp.setToolTipText(getImageFile(bo.getImageLink()));
} else {
jcomp.setToolTipText(null);
}
}
}

@Override
public void mouseExited(MouseEvent e) {
rowh = -1;
colh = -1;
}
});

关于java - 计算鼠标悬停时的工具提示而不是加载表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46951757/

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