我有一个包含 3 列的简单 JTable
。数字变大了,所以我通过在其中加上逗号来格式化它们,即 100,000。但是,这样做时,我的表格排序不起作用。
我该如何解决这个问题?
package tables;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class mainwindow extends JPanel {
public static void main(String[] args) {
Object[][] data = {
{"75,500", "Don't Let Go", new Integer(179)},
{"121,343", "Photograph", new Integer(29)},
{"32,323", "Hash Pipe", new Integer(186)}
};
Object[] columns = {"Track #", "Title", "Length"};
DefaultTableModel model = new DefaultTableModel(data,columns) {
@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
return String.class;
case 2:
return Integer.class;
default:
return String.class;
}
}
};
JTable table = new JTable(model);
JScrollPane scroll = new JScrollPane(table);
table.setAutoCreateRowSorter(true);
JOptionPane.showMessageDialog(null, scroll);
}
}
最佳答案
你不会对第一列进行数字排序,因为数据是字符串而不是数字,我建议你将数据保留为整数,
Object[][] data = {
{75500, "Don't Let Go", new Integer(179)},
{121343, "Photograph", new Integer(29)},
{32323, "Hash Pipe", new Integer(186)}
};
创建并使用具有所需格式的新 cellRender:
table.setDefaultRenderer(Integer.class, new DefaultTableCellRenderer() {
private NumberFormat numberFormat = new DecimalFormat("#,###,###");
@Override
protected void setValue(Object aValue) {
Integer value = (Integer) aValue;
super.setValue(numberFormat.format(value));
}
});
关于java - JTable - 排序不适用于格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27211076/