我不知道如何在JTable中对齐单元格的值.
对于Ex,Jtable显示,姓名薪水Mr.X 100000.50 XXXX 234.34 YYYy 1205.50
我想以下列格式对齐"工资".
Name Salary
Mr.X 100000.50
XXXX 234.34
YYYy 1205.50
Run Code Online (Sandbox Code Playgroud)
如何在JTable上面对齐
你们在我的上一个问题上指出了正确的方向,你们真是太棒了,我在这里有一些原始问题的扩展:
如何将JTable列设置为String并排序为Double?
我现在通过使用我的自定义单元格渲染器将我的价格列格式化为$ ###,## 0.00,我现在也为单元格设置了一个JTextField编辑器.编辑单元格工作正常,除了更新值时,我的自定义渲染器中设置的数字格式似乎不再格式化单元格(我在编辑提交后丢失了$).即使在初始显示数据之后,此渲染器是否也不应渲染单元格?
我试过使用以下但没有运气:
((AbstractTableModel) table.getModel()).fireTableDataChanged();
Run Code Online (Sandbox Code Playgroud)
我希望这会强制表重新验证并使用自定义渲染器重新绘制单元格以呈现新值,但遗憾的是这不起作用...
我错过了什么......显然,但是什么?
通常,在使用JTable
或JTree
用户写入和分配时,它是自己的特定单元格渲染器.
从中继承用户的组件是非常常见的DefaultTableCellRenderer
,并实现了渲染器方法getTableCellRendererComponent
.事实证明,DefaultTableCellRenderer
事实上继承自JLabel,因此当调用super(在render方法中)时返回自己(this),因此用户的渲染器也可以类似地返回自己(this).
这一切都运作良好.
我的问题是它怎么样?
每次由表调用此方法时,都会为其指定不同的参数,并根据这些参数更改输出标签.如果它确实是标签的同一实例 - 不应该根据最后一次调用此方法进行更改?是不是意味着所有表格的单元格都是由同一个标签实例组成的,该标签实例保持相同的值(最后一次调用渲染器方法的值)?
我在网上搜索,并在Swing的代码中挖掘,找不到任何实际复制输出标签的克隆或复制构造函数.我找不到任何证据表明(可能)swing使用反射,以便每次从头开始重新实例化渲染器.
我已经阅读了关于JTables的Swing 教程,在那里我可以找到下一行:
您可能希望表中的每个单元格都是一个组件.但是,出于性能原因,Swing表的实现方式不同.相反,单个单元格渲染器通常用于绘制包含相同类型数据的所有单元格.您可以将渲染器视为可配置的墨迹标记,该表用于将适当格式化的数据标记到每个单元格上.当用户开始编辑单元格的数据时,单元格编辑器接管单元格,控制单元格的编辑行为.
他们给出了一个暗示,我所说的确实是正确的,但不解释它是如何实现的.
我无法得到它.可以吗?