Java Swing组件,具有自动换行功能和有限宽度,支持HTML
我想实现一个带有滚动条的小工具提示,就像eclipse中悬停在类或成员上方时出现的滚动条一样 我遇到的问题是,如何在工具提示中的滚动窗格中仅限制组件的宽度而不限制其高度。该组件应该支持HTML,并且当文本超过内部边界的宽度时,也应该正确地包装文本,但是我尝试过的所有组件都有换行或HTML呈现,但不是两者都有 也找不到一种仅限制宽度的方法,因为每个“setXSize”,其中X是“首选”“max”“min”等。所有这些都需要两个参数,并且没有用于组件的“setMaxWidth”方法 设置“setMaximumSize(新维度(256,Integer.MAX_VALUE);”似乎是一个解决方案,但它不起作用,因为“MAX”和“min”设置的参数在大多数情况下被忽略,这相当令人沮丧 应要求提供实施的当前示例:Java Swing组件,具有自动换行功能和有限宽度,支持HTML,java,html,swing,jscrollpane,jtextcomponent,Java,Html,Swing,Jscrollpane,Jtextcomponent,我想实现一个带有滚动条的小工具提示,就像eclipse中悬停在类或成员上方时出现的滚动条一样 我遇到的问题是,如何在工具提示中的滚动窗格中仅限制组件的宽度而不限制其高度。该组件应该支持HTML,并且当文本超过内部边界的宽度时,也应该正确地包装文本,但是我尝试过的所有组件都有换行或HTML呈现,但不是两者都有 也找不到一种仅限制宽度的方法,因为每个“setXSize”,其中X是“首选”“max”“min”等。所有这些都需要两个参数,并且没有用于组件的“setMaxWidth”方法 设置“setMa
public class MyTooltip extends JTooltip{
private JScrollPane scroll;
private JEditorPane pane;
public MyTooltip(String htmlCode){
this.pane = new JEditorPane();
this.scroll = new JScrollPane(this.pane);
this.pane.setEditable(false);
this.pane.setContentType("text/html");
this.scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//Here the problems begin
this.pane.setMaximumSize(new Dimension(512, Integer.MAX_VALUE));
this.scroll.setMaximumSize(new Dimension(512, Integer.MAX_VALUE));
this.pane.setText(htmlCode);
this.add(scroll);
}
}
- 实际的代码有点复杂,但我认为这是一个很好的近似
HTMLEditorKit
(内容类型text/html)尝试过JTextPane
我想这就是你所需要的。好吧,整个问题本身就解决了:一个想法是让用户编写自己的文本以显示在工具提示上,但这包括允许他在需要时使用多个“空格”进行缩进 为了让HTML按预期呈现,我们将每个“空格”替换为
,因此不会对字符之间的间距进行优化,但这当然会导致自动换行的算法不会接受单词之间的任何“间距”作为断开行的合适位置
因此,我们的实现实际上是按预期工作的,只有我们提供的工具提示显示的字符串不适合换行。通过编辑添加。文本会显示,但当HTML片段的任何一行太长时,我不会换行,但文本会一直在视口之外,并通过对齐v来固定视图本身查看显示文本的中心-让文本覆盖不超过我想要的最大宽度的相关部分的过大部分,不要设置窗格的最大/首选/最小大小。