package table;
/*
* DoubleTableDemo.java
*/
import java.awt.*;
import java.text.*;
import javax.swing.*;
import javax.swing.table.*;
public class DoubleTableDemo extends JFrame {
public DoubleTableDemo() {
super("DoubleTableDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400,300);
setLocationRelativeTo(null);
initComponents();
table.setDefaultRenderer(Double.class,
new FractionCellRenderer(10, 4, SwingConstants.RIGHT));
}
private void initComponents() {
table = new JTable();
table.setModel(new DefaultTableModel(
new Object [][] {
{new Double(2.45), new Double(456.1234567)},
{null, new Double(2.5)}
},
new String [] {
"Title 1", "Title 2"
}
) {
Class[] types = new Class [] {
Double.class, Double.class
};
public Class getColumnClass(final int columnIndex) {
return types [columnIndex];
}
});
getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
}
public static void main(final String args[]) {new DoubleTableDemo().setVisible(true);}
private JTable table;
}
class FractionCellRenderer extends DefaultTableCellRenderer {
public FractionCellRenderer(final int integer, final int fraction, final int align) {
this.integer = integer; // maximum integer digits
this.fraction = fraction; // exact number of fraction digits
this.align = align; // alignment (LEFT, CENTER, RIGHT)
}
protected void setValue(final Object value) {
if (value != null && value instanceof Number) {
formatter.setMaximumIntegerDigits(integer);
formatter.setMaximumFractionDigits(fraction);
formatter.setMinimumFractionDigits(fraction);
setText(formatter.format(((Number) value).doubleValue()));
} else {
super.setValue(value);
}
setHorizontalAlignment(align);
}
final private int integer;
final private int fraction;
final private int align;
final private NumberFormat formatter = NumberFormat.getInstance();
}