我想在java中的JLabel上用html显示图片,可是显示不了,想问下为啥?要怎么弄?代码如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想在java中的JLabel上用html显示图片,可是显示不了,想问下为啥?要怎么弄?代码如下相关的知识,希望对你有一定的参考价值。

JLabel label = new JLabel();
label.setText("<html><img src='image103.png'/></html>");
//图片就在工程的根目录下

JLabel 中的 img 毕竟没有浏览器中的 img 那么强大,没有办法识别本地相对路径,需要指定为 绝对路径,并需要在前面添加 file:/ 。例如项目路径为 E:/JavaProjects/demo1/ 则代码如下:

label.setText("<html><img src='file:/E:/JavaProjects/demo1/image103.png' /></html>");

建议将图片放在 src 下,这样就可以动态获取。例如:

URL imageUrl = getClass().getResource("/image103.png");
label.setText("<html><img src='" + imageUrl  + "' /></html>");

参考技术A

虽然我不懂java,但目测,你的html有问题~

label.setText("<html><img src='image103.png'/></html>");

下面是html最基本的页面你参考下?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img src="">
</body>
</html>

不清楚你是要生成一个html页面还是怎样?

如何在 Java Swing 中的 JLabel 中设置行距/高度?

【中文标题】如何在 Java Swing 中的 JLabel 中设置行距/高度?【英文标题】:How to set line spacing/height in a JLabel in Java Swing? 【发布时间】:2011-03-08 00:04:36 【问题描述】:

我有以下 JLabel 代码:

JLabel someJLabel = new JLabel("<html>first line<br>second line</html>");
someJLabel.setFont(new Font("Arial", Font.PLAIN, 16));

我想做的是能够控制两条线之间的线高/间距。

PS:我也研究过使用段落而不是断线,但这是一回事。而且我不知道您是否可以在不使用 css 的情况下在 html 标记中执行此操作(您不能在 Java Swing 的 JLabel 的 html 代码中使用 css)。

【问题讨论】:

【参考方案1】:

您可以尝试使用两个标签,并使用 LayoutManager 设置两者之间的距离以及空白。我自己喜欢 GridBoxLayout。

编辑:GridBagLayout。哎呀!

【讨论】:

我不得不说这可能会比编辑工具包更强大。 如果你只有 2 行这可能有效,但如果它是多行呢? 如果是多行,我会使用文本窗格,带有 camickr 的解决方案。【参考方案2】:

查看 HTMLEditorKit 的 setStyleSheet(...) 方法。我以前从未使用过它,但我相信它提供了一些基本支持。

否则,您可以使用 JTextPane 来控制行距。我想你会使用:

StyleConstants.setLineSpacing(...);

然后您可以更改前景/背景等,使文本窗格看起来像一个标签。

【讨论】:

【参考方案3】:

这应该有效,但事实并非如此。 color: green 可以工作。

content.add(new JLabel("&lt;html&gt;&lt;p style=\"line-height: 150%;\"&gt;hi&lt;br&gt;world&lt;/p&gt;&lt;/html&gt;"));

我猜 line-height 不起作用。如果你要使用 CSS,你会这样做,所以也许你不能那样做。 Here's a nice tool我发现你可以用它来测试你的 HTML 是否能快速运行。

【讨论】:

Ya .. Swing 中的 CSS 支持目前非常糟糕。 line-height 属性已建模但未渲染。 CSS 的 Javadoc 显示了支持哪些 CSS 属性。 java.sun.com/javase/6/docs/api/index.html?javax/swing/text/html/… 没有css有没有办法做到这一点?也感谢您提供链接!【参考方案4】:

设置空白边框有帮助吗,比如

label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

方法语法 BorderFactory.createEmptyBorder(int top, int left, int bottom, int right)

【讨论】:

【参考方案5】:

嗯 .. JLabel 中的 CSS 似乎对我有用,如果有人坚持支持的属性。试试padding(或margin)和font-size

someJLabel = new JLabel("<html><body><p style=\"padding:10; font-size:30\">First line</p><p style=\"padding:10; font-size:20\">Second line</p></body></html>");

【讨论】:

【参考方案6】:

由于 Java 支持

标签和 CSS ma​​rgin 属性,您可以使用下一个解决方案:

new JLabel("<html>first line<p style='margin-top:-5'>second line");

附:现在不需要关闭html标签了。

【讨论】:

另请注意:margin-top:-5px 不起作用,但 margin-top:-5 可以,无论出于何种原因... 我使用 margin-top: 5

以上是关于我想在java中的JLabel上用html显示图片,可是显示不了,想问下为啥?要怎么弄?代码如下的主要内容,如果未能解决你的问题,请参考以下文章

Java JLabel中HTML表格单元格中的文本垂直居中

如何在 JLabel 中设置填充

如何将 html 放入 java 中的 JLabel 中?

通过单击按钮循环浏览 Jlabel 的图像时的 for 循环问题

在 JLabel 中显示 BMP

Java AWT - 如何在 Arraylist 中保存图像