急~~~~!!取JTable中的JComboBox值问题!!!请大侠指点!

lilysky 2005-10-10 11:04:21
为了使JTable中的某列是JComboBox形式,但是每行的JComboBox的取值都是不同的。
我自定义了TableCellEditor,已经实现了。
但是??我遍历表中的所有Row,发现每行取出的JComboBox选值都是一样的!!!

请大家帮我看看代码:

package tb.test;

import javax.swing.AbstractCellEditor;
import javax.swing.table.TableCellEditor;
import javax.swing.JComboBox;
import javax.swing.JTable;
import java.awt.Component;
import java.util.Vector;
import javax.swing.JCheckBox;
import java.util.EventObject;
import sun.jdbc.rowset.*;
import java.sql.*;

public class MyCellEditor extends AbstractCellEditor implements TableCellEditor {
JCheckBox check;
Object obj = null;
JComboBox box;
JTable tb;

public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int rowIndex, int vColIndex) {
if(value instanceof Vector)
{
obj = value;
Vector vv = (Vector) value;
box = new JComboBox(vv);
box.setFont(new java.awt.Font("宋体", 0, 12));

if (isSelected)
{
box.setForeground(table.getSelectionForeground());
box.setBackground(table.getSelectionBackground());
} else
{
box.setForeground(table.getForeground());
box.setBackground(table.getBackground());
}

box.setSelectedItem(value);
box.repaint();
return box;
}
return check;
}


//取单元值
public Object getCellEditorValue() {

//如果是单选框
if(obj instanceof JCheckBox)
{
if (check.isSelected())
return Boolean.TRUE;
else
return Boolean.FALSE;
}
if(obj instanceof Vector)
{
return box.getSelectedItem().toString();
}

return null;
}
public boolean isCellEditable(EventObject evt)
{
return true;
}
public boolean stopCellEditing() {
return true;
}
}
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzmailcn 2005-10-26
  • 打赏
  • 举报
回复
写一个TableModel类吧,重写getColumnClass(),返回在JComboBox的model中一致的类,如在JComboBox有10个myClass对象,则在相应列返回myClass.class。再把JComboBox的editor指定给table的相应列,其他就不用再做作任何工作了。
stan001140 2005-10-26
  • 打赏
  • 举报
回复
看来只有重写jtable的getColumnModel(),真抑闷,java为什么没有自带这个功能!
stan001140 2005-10-26
  • 打赏
  • 举报
回复
我也碰到同样的问题,顶!
Kingxinyu 2005-10-23
  • 打赏
  • 举报
回复
mark
lilysky 2005-10-10
  • 打赏
  • 举报
回复
我的JTable使用方式:

1.在Frame初始化的时候 , 给对应的列定义渲染类
// 定义渲染类
TSCellEditor tsCellEditor = new TSCellEditor();
tbParam.getColumn("列b").setCellEditor(tsCellEditor);

2.JTable数据绑定
我给“列b”绑定的值是一个Vector ;由于每行记录的中该列对应的Vector都不同;
所以JTable显示的时候,每行的JComboBox的值的集合都不同;

3.JComboBox的取值
JTable1.getCellEditor(rowid,“列b”的对应列号).getCellEditorValue().toString()

结果每行记录的下拉列表框取值都是一样的 :(

大家帮我看看怎么解决这个问题啊!!!!!!!万分感谢!!! :D
lilysky 2005-10-10
  • 打赏
  • 举报
回复
每次操作JComboBox的时候运行了getTableCellEditorComponent(),返回的当前操作的JComboBox是MyCellEditor类中的全局变量,
这就导致我在取该单元格的值getCellEditorValue()的时候box没有动态更新;box永远是最后操作的那个。
但是怎样才能根据行、列得到单元格对应的JComboBox?????

62,614

社区成员

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

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