Java 如何获取JTable中显示的单元格值(不是完整的TableModel值)?

Java 如何获取JTable中显示的单元格值(不是完整的TableModel值)?,java,swing,jtable,Java,Swing,Jtable,通常,我使用 table.getModel().getValueAt(rowIndex, columnIndex) 但是,现在我有一个给定的输入JTable(我不控制或创建它),需要将单元格值显示为字符串。如果该值是一个Double,则其位数可能比JTable显示的位数多 例如: JTable显示0.37(两位数)-但getValueAt返回0.37234421 我要找的是将显示的值作为字符串,或者显示的数字的#(因此我可以相应地更改getValueAt的双精度() Object value

通常,我使用

table.getModel().getValueAt(rowIndex, columnIndex)
但是,现在我有一个给定的输入
JTable
(我不控制或创建它),需要将单元格值显示为
字符串。如果该值是一个
Double
,则其位数可能比
JTable
显示的位数多

例如:
JTable
显示0.37(两位数)-但
getValueAt
返回0.37234421


我要找的是将显示的值作为
字符串
,或者显示的数字的#(因此我可以相应地更改
getValueAt
的双精度()

Object value = jtable.getValueAt(row, column);
Component component = jtable.getCellRenderer(row, column).getTableCellRendererComponent(jtable, value, isSelected, hasFocus, row, column);
if (component instanceof JLabel) {
    String displayedValue = ((JLabel) component).getText(); // here you are
}
小心通过调用例如
JTable.setDefaultRenderer(columnClass,renderer),可以将
JTable
CellRenderer
替换为某人
。然后,根据实现的不同,生成的
组件可能不再是
JLabel
。在后一种情况下,需要不同的逻辑来检索显示的值(即将
组件
转换到不同的类并从该实例检索).但是默认情况下,
JTable
使用的
DefaultTableCellRenderer
实现返回一个
JLabel

但是
您看到的值也可能与此不同…如果表中的列不够宽,则文本
23.4567
可能是文本,但实际显示的文本是
23.4…
…如果您想知道实际显示的值,则需要另一种方法…

这似乎非常有效,只是用一些表测试了它,包括一些表列根本不显示数字(显示“####”)或显示缩短的数字(显示“21..”)。我会将此标记为答案,但您添加了免责声明,说明事情可能会出错。我该如何确保它们不显示(我的testinput表似乎正常工作)。谢谢你提出这个问题,我在“小心与无论如何”一节的回答中详细阐述了这一点。