【问题标题】:I don't want JTable to truncate text with ellipses我不希望 JTable 用省略号截断文本
【发布时间】:2013-07-04 14:39:18
【问题描述】:

这是我的问题:我正在使用 JTable 并创建了自己的 AbstractTableModel。到目前为止,一切都很好。当文本太长时,单元格渲染器会截断文本并显示省略号,但我的一些数据库注册表也有省略号。例如:我一直在学习的程序语言:

第一个注册表“Visual Basic (2003-2007)”
第二个注册表“C++ (2006-2010)”
第三个注册表“Java (2010-...)”

意味着我在 2007 年停止尝试学习 VB。在 2010 年停止了 C++。我仍在学习 Java。但是当列不是那么大的时候,会被截断,有时候会显示这样的:

“Visual Basic (2003-...”
“C++ (2006-2010)”
“Java (2010-...)”

用户可能会感到困惑,认为“Visual Basic (2003-...”应该是“Visual Basic (2003-2007)”的意思是“Visual Basic (2003-...)”

对不起,如果我不够清楚,希望大家理解,我只是希望JTable 截断没有省略号的文本。

【问题讨论】:

  • 看看stackoverflow.com/questions/7971178/… 更准确地说是第一个答案,它应该会有所帮助。
  • 我已经阅读了答案及其重定向到的帖子,但该帖子是关于 CSS 的,我正在开发一个桌面 JAVA 应用程序,但感谢您的回答,如果我不明白,请见谅。
  • 即使答案中的示例链接与 CSS 无关? stackoverflow.com/questions/3597550/… 看看上面那个答案……它们都是关于纯 Java 的。
  • @JonathanDrapeau:感谢您提供的链接,我认为这是适当的。 Avenger:我(过早地)投票结束了这个问题,因为我没有“对正在解决的问题表现出最低限度的理解”。我以为你是在提供简历,但我认为你是想举个例子。我已经编辑了问题以澄清。
  • 是的,这只是一个例子,真正的桌子是关于汽车......件?比如卖空气滤清器、机油、卷盘等等……有些是特定年份的专用车,有些是任何年份的车型,所以我们用“...”来指定“任何年份”,我只是不能像 JTable 那样显示那些“...”,因为我们的卖家会感到困惑,谢谢,欢迎任何帮助

标签: java swing jtable truncate preferredsize


【解决方案1】:

这个answer 显示了椭圆是如何产生的;而不是试图打败他们,更好的方法是将您的JTable 添加到允许表格在调整封闭Window 大小时进行调整的布局。在这个example 中,表格填充BorderLayout.Center,默认为JFrame。为了更吸引人的初始外观,

附录:虽然我从可用性的角度不推荐它,但您可以省略DefaultTableCellRenderer 的自定义子类中的省略号,该子类使用自定义LabelUI 并覆盖layoutCL(),如图所示here 和@ 987654327@.

【讨论】:

  • 对不起,我想我没听懂。我确实动态地更改了列宽。关键是,有一些描述非常大,例如:“用于 New Beetle、Ecosport 和 Fiesta 2007/2009 通风发动机的矿物油”如果屏幕(面板、jframe、jdialog)达到其最大尺寸,那么该列也会出现最大尺寸和“...”将显示,有时将“2007/2009”更改为“2007/...”如果用户注意,他会看到单元格中有更多文本,但作为程序员,我不能离开这么大的“如果用户足够聪明就能看到”
  • 是的,总是有一些文本太长而无法在原位看到。在解决此问题的许多方法中,我喜欢工具提示、对话框或TablePopupEditor 的一些变体。
  • 这篇文章是关于编辑单元格的,我不想编辑它。我担心的是我们的供应商,他们会列出我们的产品,如果他们看到“2001/...”,他们就会卖错产品。我的 JTable 不可编辑,只有用户可以选择列大小和行顺序(排序),但列大小会随窗口大小自动变化。我只是想选择 JTable 使用什么单元格溢出,或者去掉任何溢出的迹象。如果供应商看到“2001”,他们知道还有一些东西,但如果他看到“2001/...”,他认为文本到此结束。谢谢回复
  • 对,您需要一个工具提示、对话框或(名义上的)TablePopupRenderer。尽管我不建议这样做,但您可以在使用自定义 LabelUI 并覆盖 layoutCL() 的自定义 renderer 中省略省略号,如引用的第一个示例所示。
  • 我正在阅读LabelUI,试图找到一种方法来覆盖layoutCL。我找到了this post 但我不知道如何注册我的LabelUI,有什么帮助吗?