【问题标题】:Using HTMLEditorKit in Java, <img> tags are ignoring my CSS styles (but text accepts styles just fine)在 Java 中使用 HTMLEditorKit,<img> 标签忽略了我的 CSS 样式(但文本可以接受样式)
【发布时间】:2020-08-03 04:18:49
【问题描述】:

好的,我正在用 Java 开发一个使用 HTMLEditorKit 构建的“聊天窗口”。一般的方法是我首先使用 StyleSheet.addRule() 构建样式表。我建立的样式表是:

body  {color:#ff00ff; font-family:SansSerif; font-size:12pt;}
p     {color:#ff00ff; font-family:SansSerif; font-size:12pt;}
.msg  {color:#ff00ff; font-family:SansSerif; font-size:12pt;}
.csa  {color:#ff0000; font-family:SansSerif; font-size:12pt;}
.usa  {color:#0000ff; font-family:SansSerif; font-size:12pt;}
.icon {width:16px; height:16px; object-position:0 5px; }

然后,当我有一条我想申请的聊天线路时,我把它放在一个 div 中并将它添加到 JTextPane 中:

try {       
  kit.insertHTML(doc, doc.getLength(), "\n<div class="+style+">" + s + "</div>", 0, 0, null);                   
} catch (BadLocationException ble) {
  ErrorDialog.bug(ble);           
} catch (IOException ex) {
  ErrorDialog.bug(ex);            
}
conversation.update(conversation.getGraphics()); //Force update of graphics

到目前为止,一切正常!接下来是希望能够在文本中添加小图像的问题。

只要我坚持 html 属性,添加图片本身也很顺利,例如:

<img src="dice.png" width="16" height="16">

但是,一旦我尝试做以下两件事中的任何一个,它就会忽略我所有的样式:

<img src="dice.png" class="icon">

<img src="dice.png" style="{width:16px; height:16px; object-position:0 5px; }">

我尝试了各种解决方法,包括 span 标签,我尝试了 id 样式(例如#icon 和 id="icon"),单独的 div 等。不高兴!

这是在相当旧的 Java (1.8) 版本下运行的一些遗留软件的附加组件,所以我总是“期待最坏的情况”,但正如我所说的所有 其他 CSS 样式元素(就文本和布局而言)运行良好。寻找任何故障排除提示,或者图像是否存在某种特殊的 HTMLEditorKit 限制(但只要我坚持使用 html 属性而不是 CSS,我的所有图像都可以正常工作,但我所有的 CSS 都可以正常处理文本)。非常感谢您的帮助。

【问题讨论】:

  • 添加图像本身也很顺利, - 这意味着你的最后一个问题:stackoverflow.com/questions/61310850/…,得到了回答。所以你应该通过点击复选标记“接受”答案,这样人们就知道原来的问题已经解决了。
  • 基本答案是只支持 HTML3.2 的一个子集。不知道你想做的是否支持。我建议您使用 JTextPane 并使用文本属性和段落属性来设置文本样式。您上一个问题的链接中提供了一个示例。
  • 至于前面的问题——上面的答案实际上并没有帮助,或者说它很有帮助,但并没有引导我解决我的实际问题。我最终在其他地方找到了一个半答案(需要生成一个明确的 URL,例如使用 ClassLoader 等)并设法让它继续下去。我打算等几天,看看是否有人碰巧提供了该表格的答案,以便我可以接受,否则自己添加答案。不过,我很感谢你过来帮忙。
  • 1) 应该将这样的 cmets 添加到原始问题中,以便人们知道您确实阅读了该建议,否则将来会有什么激励帮助。 2) 教程中的演示代码无需任何特殊代码或类加载器即可工作。 3)如果您使用不同的解决方案,请随时发布您自己的答案。 4) 发布 minimal reproducible example 并附上您的问题来证明问题,以便人们可以准确地看到您在做什么。
  • 谢谢,我会注意到的。对于这个问题,我有强烈的动机让我专门在 HTMLEditorKit 中运行它,以利用 html。因此,我希望了解 HTMLEditorKit 限制的具体知识(例如,如果有人知道它不能也不应该将 CSS 用于图像),或者最好是能够发现或建议我“做错”的事情的人图像造型。我做了一堆搜索,找不到有这个问题的人,这让我觉得我可能“遗漏了一件事情”。

标签: java html css swing htmleditorkit


【解决方案1】:

尝试将图像设置为display: blockdisplay:inline-blockinline-block 可能不受支持。如果图像是display: inline,则高度和宽度属性不会影响图像。还建议仅设置宽度以保持纵横比。

.icon1 {
  width: 100px;
  height: 100px;
  display: block;
}

.icon2 {
  width: 110px;
  height: 110px;
  display: inline-block;
}

.icon3 {
  width: 120px;
  display: block;
}


/* extra styles for example */

img {
  margin: 4px;
}
<div class="wrap">
  <!-- div not required, just to wrap image in this example -->
  <img src="https://placekitten.com/130/130" class="icon1">
  <img src="https://placekitten.com/128/128" class="icon2">
  <img src="https://placekitten.com/132/132" class="icon3">
</div>

编辑:

如果您设置了 div 的高度和宽度,则使用带有 background-image: url(path/to/image/file) 设置的背景图像的 div 可能会起作用。

【讨论】:

  • 唉,不高兴。尝试生成您的确切样式,还尝试将例如显示:块;在 img 标签的 style="..." 属性中。出于某种原因,我无法让窗口接受图像上的样式——它接受所有适合文本元素的样式/类/等内容。它接受像 width="16" 这样的属性,对于图像来说很好。长宽比的要点——在这种情况下,我的原始图像是正方形,但我真的应该只强制高度(这对我来说是重要的约束)并让宽度自动符合。
  • 为了清楚起见,如果我将所有内容放入 browser 中,它毫无疑问可以完美运行——它只是没有采用这个 Java HTMLEditorKit 窗口中的 img 样式,我不知道为什么。
  • 也只支持html 3.2,所以css支持不是最大的。 stackoverflow.com/a/25147343/9680087
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多