问题描述
我的JTable模型
DefaultTableModel modelim = new DefaultTableModel() {
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return Date.class;
case 5:
return Double.class;
default:
return String.class;
}
}
};
1234.25
177.12
1745.02
1748.10
1899.00
这是第5列的项目。但是,当我启动程序时,它们看起来像这样。
1234.25
177.12
1745.02
1748.1 //different
1899.0 //different
因此它在点后至少显示1个数字。但是我想看到点后有2个数字的数字。
1748.10
1899.00
解决方法
使用自定义单元格渲染器。参见How to Use Tables和Using Custom Renderers
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.text.NumberFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new BorderLayout());
JTable table = new JTable();
DefaultTableModel modelim = new DefaultTableModel() {
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Integer.class;
case 1:
return String.class;
case 2:
return String.class;
case 3:
return String.class;
case 4:
return Date.class;
case 5:
return Double.class;
default:
return String.class;
}
}
@Override
public int getColumnCount() {
return 6;
}
};
modelim.addRow(new Object[] {1,"1",new Date(),1.234567});
modelim.addRow(new Object[] {1,2.345678});
modelim.addRow(new Object[] {1,3.456789});
modelim.addRow(new Object[] {1,4.567890});
modelim.addRow(new Object[] {1,5.678901});
modelim.addRow(new Object[] {1,6.789012});
table.setAutoCreateRowSorter(true);
table.setModel(modelim);
table.getColumnModel().getColumn(5).setCellRenderer(new DoubleFormatTableCellRenderer());
add(new JScrollPane(table));
}
}
public class DoubleFormatTableCellRenderer extends DefaultTableCellRenderer {
private NumberFormat numberFormat;
public NumberFormat getNumberFormat() {
if (numberFormat == null) {
numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(2);
}
return numberFormat;
}
@Override
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column) {
if (value instanceof Double) {
value = getNumberFormat().format(value);
}
return super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
}
}
}
我确实使用一个。可以,但是当我尝试对数字进行排序时,我的排序不正确。所以我不得不使用Double column类来使它们排序正确。但是在我使用Double column class之后,数字变成了这样
下次,提供一个minimal reproducible example-它可以防止使用情况在您可能已经走过的地面上运行和/或查看您的解决方案为何不起作用