我在一个表格中的一列加入JCombobox控件进行选择输入.现在有个问题.怎么能实现在第一行选择过的条目在新增的一行中过滤掉,也就是不显示出来.
比如我JCombobox中有"AAA","BBB","CCC"三个选项放在JTable的第一列.当我第一行选择了 AAA的时候,新增一行输入的时候第二行选择框就只能选择 "BBB","CCC".当选择了 "CCC"时
再新增一行的时候,下拉框里就只有一个"BBB"的选项.
请问这样的效果该如何实现.希望高手能提示一下算法,并提供部分代码.谢谢
比如我JCombobox中有"AAA","BBB","CCC"三个选项放在JTable的第一列.当我第一行选择了 AAA的时候,新增一行输入的时候第二行选择框就只能选择 "BBB","CCC".当选择了 "CCC"时
再新增一行的时候,下拉框里就只有一个"BBB"的选项.
请问这样的效果该如何实现.希望高手能提示一下算法,并提供部分代码.谢谢
当选择一个选项时,将JComboBox中的该项删除。
当某个已经选择的行重新选择时,将旧选项加入JComboBox,将新选项从JComboBox中删除。
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;
}
}
}
} 刚写的,看看符不符合楼主的要求?
不过,重新实现了JComboBox的ItemListener,当对JComboBox进行选择时,来处理响应选项的变化