icezx 2009-11-11 16:33
浏览 431
已采纳

Swing中JTable的TableCellRenderer问题

小弟近期正在用Swing做一个小工具。遇到一个恼人的问题!
应用场景是这样的.如图所示:
[img]http://dl.iteye.com/upload/attachment/166734/39bcacf0-3531-3303-a84a-745d8e3a0831.jpg[/img]

在表格内显示任务,每条任务对应表格内的一行。
重写了TableCellRenderer,表格的最后两列为进度条和按钮。

通过选中的rowIndex和columnIndex来确定用户点击了按钮所在的单元格。
如果鼠标点选到了"按钮单元格"则 禁用该按钮。
代码如下:
[code="java"]
private void tbl_taskMouseClicked(java.awt.event.MouseEvent evt) {

    JTable table= (JTable) evt.getSource();

    int colIndex=table.getSelectedColumn();
    int rowIndex=table.getSelectedRow();

    if(colIndex==4){//如果鼠标点击的单元格为“按钮单元格”

     System.out.println("按钮坐标:"+rowIndex+"-"+colIndex);
     //获取该单元格的CellRenderer 并 cast to MyTableRenderer 
     // (MyTableRenderer 是一个继承了JButton实现了TableCellRenderer接口的renderer)
     MyTableRenderer mtb=(MyTableRenderer) table.getCellRenderer(rowIndex, colIndex);

     mtb.setEnable(false);  


    }

}
[/code]

以上代码成功通过编译,但问题也随之出现了。
点击第1行的“按钮单元格”,此时该按钮单元格不变灰。此时再点击第2行的“按钮单元格”之后,第一行和第二行的单元格被一起
置灰了..情形如同window内按住"shift"在选择文件的时候出现部分全选的情况。

但我想达到的目的是点选了哪个“按钮单元格”,就让该“按钮单元格”禁用。
[code="java"]
//难道这样定位到的不是唯一一个Cell?还是说跟jtable的select机制发生了冲突?
MyTableRenderer mtb=(MyTableRenderer) table.getCellRenderer(rowIndex, colIndex);

mtb.setEnable(false);
[/code]

同样 ,在设置progressbar的时候也出现这样的问题。。切换界面的时候又发现所有按钮单元格全部置灰。

求教!

[b]问题补充:[/b]
fangfumin 提供的问题解答没法完成。

JButton obj =(JButton)jTable.getValueAt(row, col);

这个无法强制转换成JButton,getValueAt()方法是取得坐标上的值。

  • 写回答

5条回答 默认 最新

  • fang_fumin 2009-11-16 09:29
    关注

    package com.huawei.test;

    import java.awt.Component;

    import javax.swing.JButton;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;

    public class TestCellEdit implements TableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) 
    {
        JButton but =null;
        if(value instanceof JButton)
        {
            but = (JButton)value;
        }
        return but==null?new JButton():but;
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata
  • ¥35 引用csv数据文件(4列1800行),通过高斯-赛德尔法拟合曲线,在选取(每五十点取1点)数据,求该数据点的曲率中心。
  • ¥20 程序只发送0X01,串口助手显示不正确,配置看了没有问题115200-8-1-no,如何解决?
  • ¥15 Google speech command 数据集获取