我需要一个具有多行单元格的JTable,并将多个(在一个单元格中)URL转换为可点击的超链接,并支持基本样式操作(粗体,斜体,下划线),这意味着我可以在输入文本期间或之后编辑样式。我还需要它能够将样式化的单元格内容保存到数据库中。 实现这一目标的最简单方法是什么?
我已经尝试创建一个自定义单元格编辑器(并整理出多行问题),该编辑器使用JTextPane并添加了一个关键监听器,它在发布“space”字符时监听,如果最后一个单词以“http://开头” “,将其从文档中删除,然后将其添加为带有href属性和蓝色的样式文本。我还添加了监听鼠标点击超链接的监听器。这一切都在编辑过程中起作用,但是当单元格失去焦点时,所有文本都变得没有样式和黑色。也许是因为我使用了不同的渲染器和编辑器,但我也将关键侦听器添加到渲染器中。 在关闭和启动应用程序时,我也遇到了很大的问题,特别是设置表格单元格值。我应该继续尝试以这种方式工作,或者我应该回去采取不同的方法,例如将JTextPane的内容类型设置为“text / html”。如果我这样做,我真的不知道如何在键入时将URL转换为超链接。
BTW,编辑器扩展了AbstractCellEdit,而渲染器扩展了JTextPane。任何帮助将不胜感激。
答案 0 :(得分:2)
JTable
的一部分,它仅用作图章。因此,您附加到组件的所有常规内容(例如MouseListener
,ActionListener
,FocusListener
,...都不会被触发,因为该组件不是Swing层次结构的一部分。如果我没记错的话,SwingX内置支持JTable
中的超链接,但不确定它们是否可以与样式化HTML文档结合使用JTextPane
时,请使用DocumentListener
代替KeyListener
TableModel
转储到持久状态并返回。这看起来像是要求的简单部分答案 1 :(得分:1)
Robin answered您在JTable
部分,我将添加关于文字。
如果您不需要真实的HTML,即使用<a href="http://example.com">link text</a>
等链接,那么您可以使用DefaultStyledDocument
作为您的单元格的模型。要使带有http前缀的文本显示为链接,请将颜色设置为蓝色并添加下划线属性。 (DefaultStyledDocument
模型比HTMLDocument
更简单。)
要保留格式,您应该为每个单元格存储{Swing中的文本模型Document
。
无需删除并重新插入文本即可添加样式。您可以将样式应用于文档中已有的文本,使用setCharacterAttributes
方法。
您实际上可以重用Swing文本组件的渲染引擎来渲染您的单元格。您可以使用TextUI.getRootView()
获取用于演示的根视图。视图层次结构可以呈现您的文本并帮助您将鼠标单击转换为文本Element
,您可以使用它来启动超链接。