Search code examples
javaswingcomboboxjtablerenderer

ComboBoxRenderer cannot be converted to TableCellRenderer


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;
        }
    }

Solution

  • 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;
        }
        }