我有这个这样一个JTable,有两个字段,那其中一个字段的值是变化的,是不同类型的,
有字符串,颜色,Boolean类型。那我要根据这个类型来显示。
如果字符串显示字符串,如果是颜色,就显示颜色,如果是Boolean,就显示打钩或者不打钩!!!
请高手指点!!!

解决方案 »

  1.   

    使用绘制器就可以轻松搞定,就是用JTable的setCellRenderer()那个方法设定就可以了。
    自己实现一个绘制器TableCellRenderer
      

  2.   

    先定义一个超类,然后将几种类型从超类继承下来,这样在同一列中就保证是同一种类型了。
    写一个TableCellRenderer,根据不同的类,在paint中自已绘制,然后用JTable的setCellRenderer()方法设好自定义绘制器就行。给你一个绘制器参考:package com.ui.PointTable;import java.awt.Color;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.SystemColor;import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;public class ImageCellRender extends JPanel implements TableCellRenderer {
    private static final long serialVersionUID = 54526; //是否被选取
    private boolean selected; //标志
    private boolean hasFocus;

    // 行号
    private int rowNum; // 状态
    private int cellState;

    // 图标
    private ImageIcon image = null;

    //是否显示
    private boolean hasValue;

    /**
     * 构造函数
     * 
     */
    public ImageCellRender() {
    hasFocus=false;
    selected=false;
    rowNum = 0;
    cellState = PointTableModel.CELL_STATE_NORMAL;

    hasValue=false;
    } /**
     * 自定义绘制函数
     */
    public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean focused, int row, int column) { rowNum = row;
    selected = isSelected;
    hasFocus=focused; cellState=PointTableModel.CELL_STATE_NORMAL;
    if(((PointTableModel) table.getModel()).isCellChanged(row,
    column))
    cellState=PointTableModel.CELL_STATE_UPDATE;
    else if(((PointTableModel) table.getModel()).isCellDelete(row,
    column))
    cellState=PointTableModel.CELL_STATE_DELETE;

    hasValue=false;
    if(value!=null){
    hasValue=true;
    }

    return this;
    } /**
     * 绘制
     */
    public void paint(Graphics g) {
    super.paint(g); Graphics2D g2=(Graphics2D)g;

    if (hasFocus)
    g2.setColor(SystemColor.inactiveCaption);
    else {
    if (selected)// 如果选中
    g2.setColor(new Color(180,201,228));
    else {
    if (cellState == PointTableModel.CELL_STATE_DELETE)// 如果是删除状态
    g2.setColor(new Color(255, 187, 187));
    else if (cellState == PointTableModel.CELL_STATE_UPDATE)// 如果是删除状态
    g2.setColor(new Color(187, 255, 187));
    else {
    if ((rowNum + 1) % 2 == 0)
    g2.setColor(Color.WHITE);
    else
    g2.setColor(new Color(250, 250, 250));
    }
    }
    }
    g2.fillRect(0, 0, getWidth(), getHeight());

    //绘制图像
    if(hasValue&&getPrevIcon()!=null)
    g2.drawImage(getPrevIcon().getImage(), getWidth() - 12, 2, this);
    }

    /**
     * 创建图标
     * 
     * @return
     */
    private ImageIcon getPrevIcon(){
    if(image==null){
    try {
    image = new ImageIcon(getClass().getResource(
    "/res/Images/MiniView_Act.PNG"));
    } catch (Exception e) {
    System.out
    .println("创建图标时错误!\t代码:ImageCellRender.getPrevIcon()\t错误内容:"
    + e);
    }
    }

    return image;
    }
    }