Java JTable如何在双栏类中以(#.00)格式显示数字?

Java JTable如何在双栏类中以(#.00)格式显示数字?,java,swing,jtable,Java,Swing,Jtable,我的JTable模型 DefaultTableModel modelim = new DefaultTableModel() { public Class getColumnClass(int column) { switch (column) { case 0: return Integer.class; cas

我的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;
                }
            }
        };
我有一张表格。第5列表示双精度数字。比如说

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个numer的数字

1748.10
1899.00

就这样。如果你们需要,我可以分享更多的代码。

使用自定义单元渲染器。看到和

我确实用一个。这是可以的,但当我试图排序的数字,我没有排序正确。所以我需要使用双列类来使它们正确排序。但在我使用双栏类之后,数字变成了这样


下次,请提供一个-它将防止在您可能已经使用过的地方使用,并/或查看解决方案不起作用的原因。

使用自定义单元渲染器。我确实用过一个。这是可以的,但当我试图排序的数字,我没有排序正确。所以我需要使用双列类来使它们正确排序。但在我使用双栏类之后,数字变成了这样。这是一堆你不关心的信息。如果你发个帖子会有帮助的。@khelwood我会尽我所能尽快回复can@Gresta,创建自己的格式渲染器的时间太多。-哪里我没有看到任何代码?此外,您不需要创建自己的渲染器。您只需创建自己的
NumberFormat
。你读过NumberFormat类的API了吗?你搜索过论坛吗。作为一个初学者并不是不尝试和发布你的努力的理由,所以我们确实知道你做出了诚实的努力。这就是为什么每一个问题都应该贴上一个答案。然后,我们可以就改变什么提出建议。我们不是每次你有小问题的时候都为你写代码。这正是我需要的。非常感谢。@Gresta我确实使用了一个-渲染器不会影响排序。根据模型中的数据进行排序。渲染器用于显示表中的数据。在上一个问题中,已经为您提供了一个可重用的渲染器。你所需要做的就是使用正确的数字格式。
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", "1", "1", new Date(), 1.234567});
            modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 2.345678});
            modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 3.456789});
            modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 4.567890});
            modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 5.678901});
            modelim.addRow(new Object[] {1, "1", "1", "1", new Date(), 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);
        }

    }
}