Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jTable使用base64图像添加html img标记_Java_Base64_Jtable - Fatal编程技术网

Java jTable使用base64图像添加html img标记

Java jTable使用base64图像添加html img标记,java,base64,jtable,Java,Base64,Jtable,Java和这个JTable都是新手。我想在列中的一个单元格中添加一个图像。我可以添加图像,但它不显示图像,只是一个断开图像链接的图像: 这是我用来填充这些图像的代码: @SuppressWarnings(“未使用”) public void createAvatar(字符串b64图像,字符串名称,int行,int列){ 字符串html=String.format(“%s”,B64图像,名称); 表.setValueAt(html、行、列); } private void initialize

Java和这个JTable都是新手。我想在列中的一个单元格中添加一个图像。我可以添加图像,但它不显示图像,只是一个断开图像链接的图像:

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

@SuppressWarnings(“未使用”)
public void createAvatar(字符串b64图像,字符串名称,int行,int列){
字符串html=String.format(“%s”,B64图像,名称);
表.setValueAt(html、行、列);
}
private void initialize()引发异常{
…这里有更多代码。。。
试一试{
对于(int i=0;i
如果我使用如下硬编码驱动器路径:

@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);
}
@SuppressWarnings(“未使用”)
public void createAvatar(字符串b64图像,字符串名称,int行,int列){
字符串html=String.format(“%s”,”file:///C:/Users/xxxxxx/eclipse-工作空间光子(xxxxx/xxxxx/resources/avatarB.png),名称);
表.setValueAt(html、行、列);
}
它工作得很好:

当我使用硬编码的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);
String html=String.format(“%s”,“数据:image/png;base64,IVBORW0KGGOAAAANSUHEUGAAABKAAAAZCAYAAADE6YVJAAAAAXnsr0IARS4C6QAAARNQU1BAACXJV8YQUA….AZ9HTT6WUJRFZV3EPJCUNCYXZBPKIUJZCWMUE+K7lQ3q/tn0/GBK89E3SSUSSUZPU2D1W0P0MJAW2U8SI/MHPSBJPMUU8X9EVBRJT49QAABJRU5JJJUKWJUG=”,名称);
其显示与非硬编码字符串相同:

以及从代码中复制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>
Bob

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

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


当您硬编码base64源代码时会发生什么情况?@Thomas更新了我的OP以显示此OK,这至少表明Swing可能有问题。您必须在此处使用html吗?您应该能够定义单元格呈现器,从而告诉
JTable
,此单元格应呈现
JLabel
。然后该标签可能会收到e> ImageIcon
可以从与应用程序捆绑在一起的图像中创建,也可以通过将base64字符串解码为字节数组来创建。@Thomas您介意将其作为答案,并作为您所说操作的代码演示吗?
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);
<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>
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);
  }
} );