将相同的组件添加到JTextPane

时间:2013-11-27 20:46:41

标签: java swing jlabel jtextpane jcomponent

我正在设置一个包含聊天消息的JTextPane。我想将个人用户名表示为JLabel。对于单个用户,我想使用相同的JLabel对象,以便对该JLabel的任何更改将在同一JTextPane中传播它们的所有视图。但是,我发现如果插入相同的对象(insertComponent(...)),JTextPane将从它所处的任何位置擦除前一个对象,并插入当前插入位置。解决这个问题的第一种方法是为每个用户名提供单独的JLabel,但这最终可能会导致在JTextPane中创建数千个JLabel。

我正在寻找有关更好的解决方法的任何建议。文档似乎没有涵盖这种行为。

2 个答案:

答案 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。”