我仍然相当新的Java和有关于JTable中(更具体地说JXTable)和混合数据类型列类排序行的问题...让我解释...
我有一个产品上市保存数据的JXTable。 此表有一个我已经设置到String.class只有这样我可以用一个“$”前缀显示价格价格列。
我遇到的问题是,当行按价格排列,它们没有排序为双打,而是它们进行排序为字符串所以这些值:
89.85,179.70,299.40,478.80
排序为:
179.70,299.40,478.80,89.85(升序)和89.85,478.80,299.40,179.70(降序)
我想这样做的是去除“$”在分拣的时间和排序列双打。 我将如何做到这一点?
编辑:
非常感谢您吉日Patera你的回应。 这是在帮我明白的TableCellRenderer负责在这些类型的情况下操纵值有很大的帮助。 下面是成品摘录终于完成我想要的东西。
public Component getTableCellRendererComponent(JTable pTable, Object pValue, boolean pIsSelected, boolean pHasFocus, int pRow, int pColumn) {
// Use the wrapped renderer
Component renderedComponent = mWrappedRenderer.getTableCellRendererComponent(pTable, pValue, pIsSelected, pHasFocus, pRow, pColumn);
Component renderedComponentHeader = pTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(pTable, pValue, pIsSelected, pHasFocus, pRow, pColumn);
if (pColumn == 4 && pValue instanceof Double){
DecimalFormat df = new DecimalFormat("$###,##0.00");
Double d = (Double) pValue;
String s = df.format(d);
renderedComponent = mWrappedRenderer.getTableCellRendererComponent(pTable, s, pIsSelected, pHasFocus, pRow, pColumn);
}
// Set the alignment
Integer alignment = mSpecialColumnAlignmentMap.get(pColumn);
Integer width = mSpecialColumnWidthMap.get(pColumn);
if (alignment != null) {
((JLabel) renderedComponent).setHorizontalAlignment(alignment);
((JLabel) renderedComponentHeader).setHorizontalAlignment(alignment);
} else {
((JLabel) renderedComponent).setHorizontalAlignment(mDefaultAlignment);
((JLabel) renderedComponentHeader).setHorizontalAlignment(mDefaultAlignment);
}
if (width != null){
pTable.getColumnModel().getColumn(pColumn).setPreferredWidth(width);
pTable.getColumnModel().getColumn(pColumn).setMaxWidth(width);
}
return renderedComponent;
}
正如你所看到的,我已经有一个自定义的TableCellRenderer。 我用的DecimalFormat格式化的价格,我想它。
希望这可以帮助别人出未来。