请教关于Jtable与Jcombobox结合使用的一个问题.

lzc_hacker 2009-09-12 02:07:53
我在一个表格中的一列加入JCombobox控件进行选择输入.现在有个问题.怎么能实现在第一行选择过的条目在新增的一行中过滤掉,也就是不显示出来.
比如我JCombobox中有"AAA","BBB","CCC"三个选项放在JTable的第一列.当我第一行选择了 AAA的时候,新增一行输入的时候第二行选择框就只能选择 "BBB","CCC".当选择了 "CCC"时
再新增一行的时候,下拉框里就只有一个"BBB"的选项.
请问这样的效果该如何实现.希望高手能提示一下算法,并提供部分代码.谢谢
...全文
346 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzc_hacker 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chosen0ne 的回复:]
原理就是我在上面说的那样,
不过,重新实现了JComboBox的ItemListener,当对JComboBox进行选择时,来处理响应选项的变化
[/Quote]

试了一下你的代码.在反复选择的时候有一定的问题.不过思路很不错,谢谢.有一点点参考价值
lzc_hacker 2009-09-13
  • 打赏
  • 举报
回复
关键是现在每一列都是同一个JCombobox,很不好判断.想了很久都没什么头绪.希望有会的人提示一下算法,最好能提供关键代码实现
chosen0ne 2009-09-13
  • 打赏
  • 举报
回复
原理就是我在上面说的那样,
不过,重新实现了JComboBox的ItemListener,当对JComboBox进行选择时,来处理响应选项的变化
chosen0ne 2009-09-13
  • 打赏
  • 举报
回复

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

}



刚写的,看看符不符合楼主的要求?
windforcecn 2009-09-13
  • 打赏
  • 举报
回复
维护一个共有的JCombobox

下次table添加remove里面的item
chosen0ne 2009-09-12
  • 打赏
  • 举报
回复
可以自己实现TableCellEditor
当选择一个选项时,将JComboBox中的该项删除。
当某个已经选择的行重新选择时,将旧选项加入JComboBox,将新选项从JComboBox中删除。
HelloAldis 2009-09-12
  • 打赏
  • 举报
回复
哦 我做的课程设计想实现的一个功能和你很像啊
我关注中
config_man 2009-09-12
  • 打赏
  • 举报
回复
JavaSE部分忘的差不多了,不过应该可以通过事件来处理。

比如你选择的时候,可以通过对应的事件【不知道是不是onchange事件】,将选择的值从JCombobox中删除掉。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧