JTable中的某一列显示图片?

时间:2021-12-31 19:31:08
我定义了一个表数据模型,继承自AbstractTableModel,重写了4类方法。
成员变量为:
Vector<String> columns;--列名
Vector<Object> rows;--数据
SqlHelper sh; --用于连接数据库
ResultSet rs;--结果集
然后用JTbale调用这个表数据模型,现在的问题是:
以前第4列显示的是图片的路径(从数据库中读到的),如何让这一列显示出图片呢?

Demo里面的SwingSet2的代码太多了,实在是头大呀O(∩_∩)O~

5 个解决方案

#1


 自定义一个CellEditor实现TableCellEditor的接口,可以继承按钮一类可以承载图片的组件,
    重载TableModel的getTableCellEditorComponent方法,在指定的单元格将自定义的组件返回即可。

#2


实现TableCellRenderer就ok了。。。。

lz参考这篇文章
http://blog.csdn.net/chosen0ne/archive/2009/08/16/4453267.aspx



public Component getTableCellRendererComponent(JTable table, Object value,  
        boolean isSelected, boolean hasFocus, int row, int column) { 
            //根据column判断是不是需要显示图片的列,是的话就根据value生成ImageIcon,返回相应的JLabel
            if(....){//是
                return new JLabel(new ImageIcon(value));
            }else{//否
                return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
            }
        }  
    }  

#3


2L:我按照你说的方法,没有成功……

原代码(第4列显示出图片路径)
jpc_jt = new JTable();
dm = new DietModel();//抽象表模型
dm.queryAll();//数据查询,第4列为存储图片的路径
jpc_jt.setModel(dm);
修改后的代码:
jpc_jt = new JTable();
dm = new DietModel();//抽象表模型
dm.queryAll();//数据查询,第4列为存储图片的路径
TableCellRenderer renderer = new ColorTableCellRenderer(); 
jpc_jt.setDefaultRenderer(Object.class, renderer);
jpc_jt.setModel(dm);
其中TableCellRenderer如下:
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
    DefaultTableCellRenderer renderer=new DefaultTableCellRenderer(); 
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,   
            boolean isSelected, boolean hasFocus, int row, int column) {
        if(column==4){
            return new JLabel(new ImageIcon(".settings/dietiamges"+value.toStrin()));
        }else{
            return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
        }
    }
}

#4


能详细一些吗?AbstractTableModel里面没有重载etTableCellEditorComponent这个方法呀……
引用 1 楼 awusoft 的回复:
自定义一个CellEditor实现TableCellEditor的接口,可以继承按钮一类可以承载图片的组件,
  重载TableModel的getTableCellEditorComponent方法,在指定的单元格将自定义的组件返回即可。

#5


2楼不好意思哈,是我自己疏忽,少了一个正斜杠,改了之后就能显示图片了。

return new JLabel(new ImageIcon(".settings/dietiamges/"+value.toString()));

JTable中的某一列显示图片?
我希望JTable 的行高固定为128 把图片的大小也缩放成128,应该就能正常显示了?

#1


 自定义一个CellEditor实现TableCellEditor的接口,可以继承按钮一类可以承载图片的组件,
    重载TableModel的getTableCellEditorComponent方法,在指定的单元格将自定义的组件返回即可。

#2


实现TableCellRenderer就ok了。。。。

lz参考这篇文章
http://blog.csdn.net/chosen0ne/archive/2009/08/16/4453267.aspx



public Component getTableCellRendererComponent(JTable table, Object value,  
        boolean isSelected, boolean hasFocus, int row, int column) { 
            //根据column判断是不是需要显示图片的列,是的话就根据value生成ImageIcon,返回相应的JLabel
            if(....){//是
                return new JLabel(new ImageIcon(value));
            }else{//否
                return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
            }
        }  
    }  

#3


2L:我按照你说的方法,没有成功……

原代码(第4列显示出图片路径)
jpc_jt = new JTable();
dm = new DietModel();//抽象表模型
dm.queryAll();//数据查询,第4列为存储图片的路径
jpc_jt.setModel(dm);
修改后的代码:
jpc_jt = new JTable();
dm = new DietModel();//抽象表模型
dm.queryAll();//数据查询,第4列为存储图片的路径
TableCellRenderer renderer = new ColorTableCellRenderer(); 
jpc_jt.setDefaultRenderer(Object.class, renderer);
jpc_jt.setModel(dm);
其中TableCellRenderer如下:
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
    DefaultTableCellRenderer renderer=new DefaultTableCellRenderer(); 
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,   
            boolean isSelected, boolean hasFocus, int row, int column) {
        if(column==4){
            return new JLabel(new ImageIcon(".settings/dietiamges"+value.toStrin()));
        }else{
            return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);
        }
    }
}

#4


能详细一些吗?AbstractTableModel里面没有重载etTableCellEditorComponent这个方法呀……
引用 1 楼 awusoft 的回复:
自定义一个CellEditor实现TableCellEditor的接口,可以继承按钮一类可以承载图片的组件,
  重载TableModel的getTableCellEditorComponent方法,在指定的单元格将自定义的组件返回即可。

#5


2楼不好意思哈,是我自己疏忽,少了一个正斜杠,改了之后就能显示图片了。

return new JLabel(new ImageIcon(".settings/dietiamges/"+value.toString()));

JTable中的某一列显示图片?
我希望JTable 的行高固定为128 把图片的大小也缩放成128,应该就能正常显示了?

相关文章