На самом деле, входные компоненты внутри JTable
представляют собой особый случай, поскольку они активны только при редактировании ячейки.Таким образом, помимо настройки редактора для управления способом редактирования значения, вам также необходимо изменить средство визуализации, чтобы управлять отображением выбранного значения:
// As before:
TableColumn column = table.getColumnModel().getColumn(1);
column.setCellEditor(new DefaultCellEditor(optionsCombo));
// Additional line to set renderer:
column.setCellRenderer(new PlaceholderRenderer("<choose or add option>"));
Здесь PlaceholderRenderer
должно быть TableCellRenderer
реализация, которая отображает строку-заполнитель, когда значение не выбрано.Например:
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class PlaceholderRenderer extends DefaultTableCellRenderer {
final private String placeholder;
public PlaceholderRenderer(String placeholder) {
super();
this.placeholder = placeholder;
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if ((value == null) || (value.equals(""))) {
return super.getTableCellRendererComponent(table, this.placeholder, isSelected, hasFocus, row, column);
} else {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}