我使用此代码创建了一个JTable:
table = new JTable(new DefaultTableModel(
new Object[][] {
},
en_entete
)
)
{
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
URL fileURL = null;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/test", "root", "root");
PreparedStatement ps = conn.prepareStatement("select name, img from table where id=1");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
File temp = File.createTempFile(name, ".jpg");
Blob blob = rs.getBlob("img");
int blobLength = (int) blob.length();
byte[] bytes = blob.getBytes(1, blobLength);
blob.free();
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
ImageIO.write(img, "jpg", temp);
fileURL = temp.toURI().toURL();
}
} catch (Exception ex) {
ex.printStackTrace();
}
html
= "<html><body>"
+ "<img src='"
+ fileURL + "'>";
Component c = super.prepareRenderer(renderer, row, column);
if (c instanceof JComponent) {
JComponent jc = (JComponent) c;
jc.setToolTipText(html);
}
return c;
}
};
因此,当鼠标悬停在我的JTable的单元格上时,图像就会显示出来。但我希望每个单元格(更改SQL请求)的图像不同,并且只显示第一列。
提前致谢
答案 0 :(得分:1)
这是一种可行的方法......
我更喜欢依赖TableCellRenderer
,但在这种情况下,它是不可能的。
相反,它使用getToolTipText
的{{1}}方法尝试根据列JTable
的值从数据库加载图像,该列被假定为ID我们正在寻找的形象。
这使用了一种缓存机制,这样每次请求工具提示时都不必点击数据库,它可以查找任何以前缓存的值。
0
请注意,如果单元格渲染器有工具提示,它将覆盖此值。