public class TextAreaRendererDemo extends JFrame {
private JTable table;
public TextAreaRendererDemo() {
String[] values = new String[] { "1", "2", "3" };
DefaultTableModel model = new DefaultTableModel(null, new String[] {"1"});
table = new JTable(model) {
};
this.getContentPane().add(new JScrollPane(table), BorderLayout.NORTH);
table.getColumnModel().getColumn(0).setCellRenderer(new SpinnerRenderer(values));
table.getColumnModel().getColumn(0).setCellEditor(new SpinnerEditor(values));
//Zeile erstellen
model.addRow(new String[] {"test"});
}
//SpinnerEditor
public class SpinnerEditor extends AbstractCellEditor implements TableCellEditor {
final JSpinner spinner = new JSpinner();
// Initializes the spinner.
public SpinnerEditor(String[] items) {
spinner.setModel(new SpinnerListModel(java.util.Arrays.asList(items)));
}
// Prepares the spinner component and returns it.
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
spinner.setValue(value);
return spinner;
}
public boolean isCellEditable(EventObject evt2) {
if (evt2 instanceof MouseEvent) {
return ((MouseEvent) evt2).getClickCount() >= 2;
}
return true;
}
// Returns the spinners current value.
public Object getCellEditorValue() {
return spinner.getValue();
}
}
//SpinnerRenderer
public class SpinnerRenderer extends JSpinner implements TableCellRenderer {
SpinnerRenderer(final String[] values) {
setModel(new SpinnerListModel(Arrays.asList(values)));
}
public Component getTableCellRendererComponent(final JTable table,
final Object value, final boolean isSelected,
final boolean hasFocus, final int row, final int column) {
setValue(value);
return this;
}
}
}