I try to create a combo box and add in my table column. I use this example. When I try to do col5.setCellRenderer(cmbRender);
it throws:
"ComboBoxRenderer cannot be converted to TableCellRenderer".
ComboxRenderer
class ComboBoxRenderer extends JLabel
implements ListCellRenderer {
private Font uhOhFont;
public ComboBoxRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
int selectedIndex = ((Integer)value).intValue();
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
String[] petStrings = {"Bird", "Cat", "Dog", "Rabbit", "Pig"};
String pet = petStrings[selectedIndex];
setUhOhText(pet + " (no image available)",
list.getFont());
return this;
}
protected void setUhOhText(String uhOhText, Font normalFont) {
if (uhOhFont == null) { //lazily create this font
uhOhFont = normalFont.deriveFont(Font.ITALIC);
}
setFont(uhOhFont);
setText(uhOhText);
}
}
I try to call like this
ComboBoxRenderer cmbRender = new ComboBoxRenderer();
TableColumn col5 = jTable1.getColumnModel().getColumn(4);
col5.setCellRenderer(cmbRender);// give me error here
I want to create in my table column with value assigned in the petString. Please advice.
This is how I do for TextBox
TextRenderer2 renderer2 = new TextRenderer2();
TableColumn col5 = jTable1.getColumnModel().getColumn(4);
MyTableCellEditor editor = new MyTableCellEditor();
col5.setCellEditor(editor);
col5.setCellRenderer(renderer2);
col5.setPreferredWidth(100);
TextRenderer
class TextRenderer2 extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
JPanel jp_panel = new JPanel();
JTextPane jta_text = new JTextPane();
JScrollPane jsp_scroll = null;
String valStr = value.toString();
jta_text.setText(valStr);
jp_panel.setLayout(new BorderLayout());
jsp_scroll = new JScrollPane(jta_text);
jp_panel.add(jsp_scroll, BorderLayout.CENTER);
return jp_panel;
}
}
change the implements ListCellRenderer to implements TableCellRenderer
class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
public ComboBoxRenderer(Object[] items) {
super(items);
}
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
// Select the current value
setSelectedItem(value);
return this;
}
}