有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在JTable中插入JComboBox可编辑和动态?

我有一个JTableJComboBoxJTable并且还可以。现在,我想将这个组合框设置为可编辑的,并且我还希望用户可以将这个组合框中的元素自动添加到我的数据库中

因此,用户可以选择此comboBox上的所有组件之一,或者用户可以添加新元素。问题是JComboBox是我的表的一列。所以我有这个,但它不起作用:

public void setUpColumnTaglia(JTable table, TableColumn taglia) {
    String[] listaDescrizione = new String[0];
    if(listaTaglie!=null){
        listaDescrizione = new String[listaTaglie.size()];
        int i=0;
        for (Taglia t : listaTaglie) {
            listaDescrizione[i++]= t.getDescrizione();
        }
    }

    textcomboBoxTaglia = new AutoComplete(listaDescrizione);        
    editorBoxTaglia = (JTextComponent)textcomboBoxTaglia.getEditor().getEditorComponent();
    editorBoxTaglia.setText("");

    taglia.setCellEditor(new DefaultCellEditor(textcomboBoxTaglia));
    //Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer =
        new DefaultTableCellRenderer();
    renderer.setToolTipText("Seleziona Taglia");
    taglia.setCellRenderer(renderer);
}

类自动完成:

package com.mcsolution.common.Componenti_Swing;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
@SuppressWarnings("serial")
public class AutoComplete extends JComboBox implements JComboBox.KeySelectionManager
{
    private String searchFor;
    private long lap;
    public class CBDocument extends PlainDocument
    {
        public void insertString(int offset, String str, AttributeSet a) throws BadLocationException
        {
            if (str==null) return;
            super.insertString(offset, str, a);
            if(!isPopupVisible() && str.length() != 0) fireActionEvent();
        }
    }
    public AutoComplete(Object[] items)
    {
        super(items);
        lap = new java.util.Date().getTime();
        setKeySelectionManager(this);
        JTextField tf;
        if(getEditor() != null)
        {
            tf = (JTextField)getEditor().getEditorComponent();
            if(tf != null)
            {
                tf.setDocument(new CBDocument());
                addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent evt)
                    {
                        try{
                            JTextField tf = (JTextField)getEditor().getEditorComponent();
                            String text = tf.getText();
                            ComboBoxModel aModel = getModel();
                            String current;
                            for(int i = 0; i < aModel.getSize(); i++)
                            {
                                current = aModel.getElementAt(i).toString();
                                if(current.toLowerCase().startsWith(text.toLowerCase()))
                                {
                                    tf.setText(current);
                                    tf.setSelectionStart(text.length());
                                    tf.setSelectionEnd(current.length());
                                    break;
                                }
                            }
                        }catch(Exception e){

                        }

                    }
                });
            }
        }
    }

    public void fireActionEvent()
    {
        super.fireActionEvent();
    }

}

对我来说,问题出在这行代码上:

taglia.setCellEditor(new DefaultCellEditor(textcomboBoxTaglia));

因为我应该放editorComboBoxTaglia,但如果我尝试这样做,我会有一个错误:

enter image description here

我怎样才能修好它


共 (0) 个答案