JTable中为任意单元格设置独立的JComboBox

最近在写一个模拟学校教务系统时遇到的一个问题,我想要让教师或者管理员添加课程,要求GUI界面表格显示添加上课时间地点等,要求表格单元中下拉框让其选择。
一开始我的思路是这样的:
获取JTable的某一列,设置列的表格单元编辑器cellEditor为缺省,并置入JComboBox:

public void setComboBox(int col,String[] items){
   
        TableColumn tc=table.getColumnModel().getColumn(col);
        tc.setCellEditor(new DefaultCellEditor(new JComboBox(items)));

    }

但是这种方式只是为某一列设置一个cellEditor对象,也就是说获取到的该列的所有行的单元格的Editor组件上都是同一个对象JComboBox;
显然这是不正确的,那有没有办法让每一行每一列的所有单元格上都有不同的JComboBox对象?
我查了一些资料后,发现重写一个自己的TableCellEditor类可以实现。具体如下:
自己写的类JComboBoxCellEditor继承AbstractCellEditor和实现TableCellEditor,里面内置一个List对象存放JComboBox,这样,本质上讲该单元格编辑器实际上还是一个一整列的编辑器,但是由于其中包含list对象,可以存放每一行的JComboBox。
这样设计后,要重写方法
public Component getTableCellEditorComponent(JTable jTable, Object o, boolean b, int row, int col),这个方法是你点击表格中的第row行第col列的单元格时会调用的一个重要方法,点击后,应该返回该单元格上存放那个的组件,我们存放的是JComboBox,所以应该根据row来获取list中的JComboBox组件,此方法实现代码如下:

public Component getTableCellEditorComponent(JTable jTable, Object o, boolean b, int row, int col) {
   
        this.table=jTable;
        this.row=row;
        this.val=o;
        //以上三句话其实用处不大,走个过
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值