Java JTable如何在双栏类中以(#.00)格式显示数字?
我的JTable模型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
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);
}
}
}