java swing JTable中如何设置一列中的某一个单元格为下拉列表?

请教各位SWING大神赐教:
我只知道设置一列为下拉列表的方法,却不知道设置某一列为下拉列表的方法。我的JTable类继承了AbstractTableModel,据说是还要重写celleditor,但是具体的小女子不清楚。已经研究这个问题一整天了。还请看见的各位大神能敲下几行代码。感激不尽!

如一楼所示代码,只要控制如下代码的某个单元格即可:
tab.getColumnModel().getColumn(“单元格ID”).setCellEditor(new DefaultCellEditor(jcb));
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-27
TableColumn tc=this.getColumn(0);// 取到一列
JComboBox cbx = new JComboBox(new String[] {"a","b","c"});// 建立下拉列表
TableCellEditor tce=new DefaultCellEditor(cbx);// 创建编辑器
tc.setCellEditor(tce);// 设置编辑器

第2个回答  推荐于2017-09-28
JTable的简单用法,渲染器的简单设置,单元格的是否可编辑处理,JComboBox的事件处理
import java.awt.event.*;   
import javax.swing.*;   
import javax.swing.table.*;   
  
public class MyTableModel  {   
    public static void main(String[] args) {   
        JFrame f = new JFrame("test");   
        Object[][] row = {{ false,"语文","数学","英语","",""},{ false, }};   
        String[] h = { "修改","1", "2", "3","4", "5",  };   
        DefaultTableModel dtm = new DefaultTableModel(){   
            @Override  
            public Class<?> getColumnClass(int c){   
                    return getValueAt(0,c).getClass();   
            }   
            @Override  
            public boolean isCellEditable(int x, int y){   
                if ( y == 0)   
                    return true;   
                else    
                    return getValueAt(x,0).toString().equals("true");   
            }   
        };   
        dtm.setDataVector(row,h);   
        dtm.addRow(new Object[]{false,"","","","","",});   
        final JComboBox<String> jcb = new JComboBox<String>();   
        jcb.addItem("数学");   
        jcb.addItem("英语");   
        jcb.addItem("语文");   
        jcb.setEditable(true);   
        jcb.addActionListener(new ActionListener(){   
            @Override  
            public void actionPerformed(ActionEvent e) {   
                String s = jcb.getSelectedItem().toString();   
                if (s.equals(""))   
                    return;   
                boolean flag = true;   
                for (int i = 0; i < jcb.getItemCount(); i++){   
                    if (jcb.getItemAt(i).equals(s)){   
                        flag = false;   
                        break;   
                    }   
                }   
                if (flag)   
                    jcb.addItem(s);   
            }   
        });   
           
        JTable tab = new JTable(dtm);   
        for (int i = 1;i < 6; i++){   
            tab.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(jcb));   
        }   
        f.add(new JScrollPane(tab));   
        f.pack();   
        f.setVisible(true);   
        f.setDefaultCloseOperation(3);   
    }   
}

追问

谢谢回答。但是你的代码里面好像是设置一列为下拉列表吧,我只想设置某一个单元格为下拉列表啊!

追答

那就设置那一个单元为可编辑属性

追问

但是这样的话 你的这一列的所有可编辑的单元格就显示为同一个下拉列表了,我想在不同的单元格里面显示不同的下拉列表该怎么做呢?

追答

那就是jcb的数据内容了,取得单元格的 行 和 列 再分别设置jcb里的数据

本回答被提问者和网友采纳
相似回答