Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ComboBoxRenderer无法转换为TableCellRenderer_Java_Swing_Combobox_Jtable_Renderer - Fatal编程技术网

Java ComboBoxRenderer无法转换为TableCellRenderer

Java ComboBoxRenderer无法转换为TableCellRenderer,java,swing,combobox,jtable,renderer,Java,Swing,Combobox,Jtable,Renderer,我尝试创建一个组合框并将其添加到我的表列中。我用这个。当我尝试执行col5.setCellRenderer(cmbRender)时它抛出: “ComboBoxRenderer无法转换为TableCellRenderer” ComboxRenderer class ComboBoxRenderer extends JLabel implements ListCellRenderer { private Font uhOhFont

我尝试创建一个组合框并将其添加到我的表列中。我用这个。当我尝试执行
col5.setCellRenderer(cmbRender)时它抛出:

“ComboBoxRenderer无法转换为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);
        }
    }
我试着这样打电话

         ComboBoxRenderer cmbRender = new ComboBoxRenderer();
         TableColumn col5 = jTable1.getColumnModel().getColumn(4);
         col5.setCellRenderer(cmbRender);// give me error here
我想在我的表列中创建一个在petString中赋值的值。请给我一些建议

这是我为TextBox所做的

TextRenderer2 renderer2 = new TextRenderer2();
TableColumn col5 = jTable1.getColumnModel().getColumn(4);
MyTableCellEditor editor = new MyTableCellEditor();
col5.setCellEditor(editor);
col5.setCellRenderer(renderer2);
col5.setPreferredWidth(100);
文本渲染器

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

将implements ListCellRenderer更改为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;
    }
    }

请问目标是什么,只是在表格单元格中显示JComboBox作为渲染器,取消JComboBox的创建…@mKorbel我没明白。我想在我的表格列中创建一个下拉列表。为了进行测试,我只使用petString在下拉列表中显示。我希望您理解渲染器的概念,渲染器只是绘画,其他什么都没有,ListCellRenderer是用于JList的,JComboBox是用于JTable的。是否有XxxTableCellRenderer/prepareRenderer,再次说明其目标是什么,问题我想在我的表列==TableCellEditor或not@mKorbel使用渲染器进行显示,并使用TableCellEditor保存值。它适用于我的文本框和复选框。使用工作的文本框渲染器编辑了我的答案。为什么您会感到惊讶-您的ComboBoxRenderer实现列表单元格渲染器,而表需要表单元格渲染器:-)您可以同时执行这两项操作:
ComboBoxRenderer实现列表单元格渲染器,TableCellRenderer
:-)