我在一个表格中的一列加入JCombobox控件进行选择输入.现在有个问题.怎么能实现在第一行选择过的条目在新增的一行中过滤掉,也就是不显示出来.
比如我JCombobox中有"AAA","BBB","CCC"三个选项放在JTable的第一列.当我第一行选择了 AAA的时候,新增一行输入的时候第二行选择框就只能选择 "BBB","CCC".当选择了 "CCC"时
再新增一行的时候,下拉框里就只有一个"BBB"的选项.
请问这样的效果该如何实现.希望高手能提示一下算法,并提供部分代码.谢谢

解决方案 »

  1.   

    JavaSE部分忘的差不多了,不过应该可以通过事件来处理。比如你选择的时候,可以通过对应的事件【不知道是不是onchange事件】,将选择的值从JCombobox中删除掉。
      

  2.   

    可以自己实现TableCellEditor
    当选择一个选项时,将JComboBox中的该项删除。
    当某个已经选择的行重新选择时,将旧选项加入JComboBox,将新选项从JComboBox中删除。
      

  3.   

    关键是现在每一列都是同一个JCombobox,很不好判断.想了很久都没什么头绪.希望有会的人提示一下算法,最好能提供关键代码实现
      

  4.   

    维护一个共有的JCombobox下次table添加remove里面的item
      

  5.   


    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.*;
    class TableTest extends JFrame 
    {
    private JTable table;
    public TableTest(){
    String[] array=new String[11];
    for(int i=0;i<10;i++)
    array[i]=""+(i+1);
    array[10]="未选择";
    JComboBoxCellEditor editor=new JComboBoxCellEditor(array);
    table=new JTable(new Object[][]{{"未选择",1},{"未选择",2},{"未选择",3},{"未选择",4},{"未选择",5},{"未选择",6}},
    new Object[]{"Column1","Column2"});
    TableColumnModel colModel=table.getColumnModel();
    colModel.getColumn(0).setCellEditor(editor);
    this.add(new JScrollPane(table),BorderLayout.CENTER);
    this.setSize(200,200);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) 
    {
    new TableTest(); }
    class JComboBoxCellEditor extends DefaultCellEditor
    {
    private Object needRemove=null;//下次点击JComboBox时,需要删除的选项
    private Object needAdd=null;//下次点击JComboBox时,需要添加的选项
    private Object value;//当前comboBox显示的值
    private JComboBox comboBox=null;
    public JComboBoxCellEditor(Object[] value){
    super(new JComboBox(value));
    }
    public Component getTableCellEditorComponent(JTable table, Object value, 
    boolean isSelected, int row, int column){
    if(comboBox==null){//初始化comboBox
    comboBox=(JComboBox)super.getTableCellEditorComponent(table, value, isSelected, row, column);
    comboBox.addItemListener(new ItemHandler());//添加事件监听
    comboBox.setSelectedIndex(10);
    }
    this.value=value;//当前JComboBox显示的选项
    if(needAdd!=null)
    comboBox.addItem(needAdd);
    if(needRemove!=null)
    comboBox.removeItem(needRemove);
    return comboBox;
    }
    private class ItemHandler implements ItemListener
    {
    public void itemStateChanged(ItemEvent e){
    needRemove=comboBox.getSelectedItem();
    //当JComboBox显示的选项与用户选择的选项不同时
    //需要将原来的显示的选项加入JComoboBox
    if(!comboBox.getSelectedItem().equals(value)&&!"未选择".equals(value)){
    needAdd=value;
    }
    else
    needAdd=null;
    }  
    }
    }
     
    } 刚写的,看看符不符合楼主的要求?
      

  6.   

    原理就是我在上面说的那样,
    不过,重新实现了JComboBox的ItemListener,当对JComboBox进行选择时,来处理响应选项的变化