我正在设置一个包含聊天消息的JTextPane。我想将个人用户名表示为JLabel。对于单个用户,我想使用相同的JLabel对象,以便对该JLabel的任何更改将在同一JTextPane中传播它们的所有视图。但是,我发现如果插入相同的对象(insertComponent(...)),JTextPane将从它所处的任何位置擦除前一个对象,并插入当前插入位置。解决这个问题的第一种方法是为每个用户名提供单独的JLabel,但这最终可能会导致在JTextPane中创建数千个JLabel。
我正在寻找有关更好的解决方法的任何建议。文档似乎没有涵盖这种行为。
答案 0 :(得分:1)
根据docs Each GUI component can be contained only once.
,因为您只能为每个用户名创建一个新的JLabel
。
或者您可以使用JTextArea
作为聊天板,并将消息添加为装饰名称的新行和用户的文本。
答案 1 :(得分:1)
任何组件都有一个父组件字段,显然它只能放在视图层次结构中一次。
如果您使用JTextPane样式文本的内容类型,例如“text / html”,您也可以插入图像。爱丽丝梦游仙境中有swing demo提供低级图像对象。在HTML中,可以添加<img src='...'>
,其中src
可以是file:...
,也可以是一些自己的协议来从类路径中获取图像(res:
,resource:
或classpath:
)。编写协议处理程序并不困难,只是有点巴洛克式。
可能this answer足以回答“带有内嵌图像的JEditorPane。”