gpt4 book ai didi

Java jTable添加带有base64图像的html img标签

转载 作者:行者123 更新时间:2023-12-02 10:19:09 25 4
gpt4 key购买 nike

Java 和 JTable 的新手。我想将图像添加到列中的一个单元格中。我可以添加图像,但它不显示图像,只是显示损坏的图像链接的图像:

enter image description here

这是我用来填充这些图像的代码:

@SuppressWarnings("unused")
public void createAvatar(String b64image, String name, int row, int col) {
String html = String.format("<html><table><td><img alt=\"Avatar\" style=\"position: absolute; top: 0px; left: 0px;\" src=\"data:image/png;base64,%s\"/>%s</td></table></html>", b64image, name);
table.setValueAt(html, row, col);
}
private void initialize() throws Exception {
...MORE CODE HERE...
try {
for (int i = 0; i < b64s.size(); i++) {
createAvatar(b64s.get(i), names.get(i), i, 8);
}
} catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
}

table = new JTable(model) {
@Override
public boolean isCellEditable (int row, int col)
{
return true;
}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
return null;
}

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);

if (c instanceof JComponent) {
if(column == 4){
JComponent jc = (JComponent) c;
jc.setToolTipText(getValueAt(row, column).toString());
}
}

return c;
}
};

table.getModel().addTableModelListener(new TableModelListener() {
@SuppressWarnings("static-access")
public void tableChanged(TableModelEvent e) {
...MORE CODE HERE...
});

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

for (int i = 0; i < b64s.size(); i++) {
createAvatar(b64s.get(i), names.get(i), i, 8);
}
}

如果我使用这样的硬编码驱动器路径:

@SuppressWarnings("unused")
public void createAvatar(String b64image, String name, int row, int col) {
String html = String.format("<html><table><td><img alt=\"Avatar\" style=\"position: absolute; top: 0px; left: 0px;\" src=\"%s\"/>%s</td></table></html>", "file:///C:/Users/xxxxxx/eclipse-workspacePhoton_xxxxx/xxxxx/resources/avatarB.png", name);
table.setValueAt(html, row, col);
}

它工作得很好:

enter image description here

当我做同样的事情但使用硬编码的 base64 字符串时:

String html = String.format("<html><table><td><img alt=\"Avatar\" style=\"position: absolute; top: 0px; left: 0px;\" src=\"data:image/png;base64,%s\"/>%s</td></table></html>", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA....aZ9htT6WuJRFzV3epJcukNncYXzbPKIUjXzcWmUe+K7lQ3q/tn0/Gbk89e3sSussuZpu2D1Wj0P0mjaW2u8Si/mHPSBJpmUUM8x9EVbrT4j3P9QAAAABJRU5ErkJggg==", name);

它显示与非硬编码字符串相同:

enter image description here

并从代码中复制 HTML 变量:

<html><table><td><img alt="Avatar" style="position: absolute; top: 0px; left: 0px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcE.....ussuZpu2D1Wj0P0mjaW2u8Si/mHPSBJpmUUM8x9EVbrT4j3P9QAAAABJRU5ErkJggg=="/>Bob</td></table></html>

<html><table><td><img alt="Avatar" style="position: absolute; top: 0px; left: 0px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAAEFUlEQVRIS82VYUxbVRTH33AbZoiZzk03BkQQp9Mw55yS6eIcg+BAqlLSOUzYCBoGGThHtuiHdTi3jKlBZWqUmAnrJjSUwVpZQAeidHTaQul7UGhf11H62s6q0Q9Dk2U73tve9/bu+kLIPvlP/mnSc87/13tPXx7zv5JVEBaNOv2rOE/waYcnlMn5fPdqtdo4Ur592e3BhDE+UMHxgpnlA/9yfABEs27hOvr0cG7hGOu6kk5G5i4AmOdwBV7n3IFQNFSAYZaHxve18E6ZBt6rfgPaWlrA4ZoWodfQj2h0hsOJJGJ2cRy3EA19TYbB8G0raNanwYtpCbD5AYZy6fOZMPCzRQRhOycuBx8kUcrS6/V3sJ7AaXHojL4dclYuiAmXW/3ESrhoG5ODfKzbn0wiY8Xywj6x2e68DMVrUyJBH1e9AsPtn0DXR3uh+PH7YkDayp1yCKA9/WIFWEBib8oxGUpDO/hHbGxtbo4EVGavhr/sJslTA6fg7fwnKUhBxmIYdU5RIHSaWhJ9U6jQJG86VPNmJMBQX0NBsP8cPgvtR3eDJnOpBOrt7bsFIlzp93rvJPEM43SGE9EprsqbKvKfg+zl88Db1xIDEf2HrQtOHiiHzcsZONn0JQXBZnn/NoJgmPFLQi5VdAugWr0UCtIWRYKUAHJrMpdB/f4aCkByviEIeuHYFisbuQLVw3crht7qik2rYMemNRQAGz3IIwSB9uEONMiLHW366ELncBK8n1cfXRy52sEhGwVBDhEEPon/U3nx+JG6CAQPTv2oUwwXPXTqmLR8XdNXcgB2mCDQSVz+A/JibUmhNHjmg7cUw0UfLs2VepsaPpQD8E4mCIJhRl3TarHgmJyGwkeWSIP4vvGVKAGwS9atkHo/O3qIgqCH0kAQDOPxhO5HX17Dhd6e89KQaPzEKwGGdPWwZUWc1LdHs5WGeIJVBBEV6xLO4ULDwXcpgOi67S+Ab+B0JByfTH+kCvJS46kevEP8p8E56Kpmxv1/LyHxUaG/8bOocGNXwUZqUPSWpDiwdzRKkB1ZqYp92l2lUQgfOE6iaaH3w4mt6XfFDOYkzQddXSV1VWzX51D02LKY3oNVO/EpAvjNSWJpdXZ2JuamxI/Lh4rTU+BcowmCwm8QHv8VwtY++J0dhJDXCxMjl6B6XR4F+aL+8MzYpLCRRCpLnZWRlJscP4YHXsvIAENhD5iKLoDtBA+cyQfnd9tguNkDnNEH31dYwagahH3rNRFATvLCq4a2tjwSNbvKNmxIfOmhe5p1+a03jCozCprdZ1U/QfmaZ9htT6WuJRFzV3epJcukNncYXzbPKIUjXzcWmUe+K7lQ3q/tn0/Gbk89e3sSussuZpu2D1Wj0P0mjaW2u8Si/mHPSBJpmUUM8x9EVbrT4j3P9QAAAABJRU5ErkJggg=="/>Bob</td></table></html>

显示效果很好(意味着 base64 图像正确且有效)

那么我可以不在 jTable 的 HTML 中使用 Base64 版本吗?

最佳答案

您可以尝试直接使用 swing 组件,而不是使用 html。从您的问题来看,您似乎有一个代表用户头像的列,因此假设数据的类型为 Avatar

然后,您可以为该列类型设置自定义单元格渲染器,并让该渲染器返回 JLabel。该标签可以包含文本和图标,因此代码可能如下所示(简化):

JTable table = ...;

table.setDefaultRenderer( Avatar.class, new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column )
{
Avatar avatar = (Avatar)value;

//you might want to think about caching the icon and maybe even the label.
Icon icon = new ImageIcon(Base64.decode( avatar.getBase64Image() ));
return new JLabel(avatar.getName(), icon, JLabel.LEFT);
}
} );

关于Java jTable添加带有base64图像的html img标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54463378/

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