package automenta.vivisect.swing.property.sheet.renderer; import java.awt.Component; import java.io.Serializable; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.swing.BorderFactory; import javax.swing.JFormattedTextField; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.table.TableCellRenderer; import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.NumberFormatter; public class NumberRenderer extends JFormattedTextField implements TableCellRenderer, Serializable { private static final long serialVersionUID = -11256720632412870L; private static final Border EMPTY_BORDER = BorderFactory.createEmptyBorder(0, 2, 0, 0); public NumberRenderer(int fracDigits) { if (fracDigits == 0) { NumberFormat fmt = NumberFormat.getIntegerInstance(); fmt.setGroupingUsed(false); NumberFormatter formatter = new NumberFormatter(fmt); setFormatterFactory(new DefaultFormatterFactory(formatter)); } else { NumberFormat fmt = new DecimalFormat("0.##########"); fmt.setMaximumFractionDigits(fracDigits); fmt.setGroupingUsed(false); NumberFormatter formatter = new NumberFormatter(fmt); setFormatterFactory(new DefaultFormatterFactory(formatter)); } } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JTable.DropLocation dl = table.getDropLocation(); if (dl != null && !dl.isInsertRow() && !dl.isInsertColumn() && dl.getRow() == row && dl.getColumn() == column) { isSelected = true; } setFont(UIManager.getFont("Table.font")); setBorder(EMPTY_BORDER); setValue(value); if (isSelected) { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { setBackground(table.getBackground()); setForeground(table.getForeground()); } return this; } }