请教下各位,怎么在JTable的一个单元格中添加一个带有图片和文字的JLabel呢?

解决方案 »

  1.   

    自己实现一个tablecellrenderer吧
      

  2.   

    各位高手,帮我看下以下的代码,疑问部分以①②③标注
    ①第一列为什么显示“D:\\pause.png”?
    ②第二列为什么显示"D:\\pause.png"的图片和字符串dddd?
    ③第二列为什么显示"D:\\pause.png"的图片?package prj;import java.awt.Color;
    import java.awt.Component;
    import java.awt.Dimension;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.border.LineBorder;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableColumnModel;/**
     * 有图片的表格
     * @author Administrator
     *
     */
    public class JTableDemo
    {
    JTable table = new JTable(); public JTableDemo() 
    {
    JFrame frame = new JFrame("有图片文字的表格");
    frame.setLayout(null); MyTableModel dm = new MyTableModel(); JTable table = new JTable();
    table.setModel(dm);
    TableColumnModel columnModel = table.getColumnModel();

    for (int i = 0; i < columnModel.getColumnCount(); i++) 
    {
    columnModel.getColumn(1).setCellRenderer(new ImageRenderer()); // 为每一列column指定Renderer
    }

    table.setDefaultRenderer(Icon.class, new ImageRenderer()); JScrollPane src = new JScrollPane(table);
    src.setBounds(0, 0, 400, 200);
    frame.setSize(new Dimension(400, 200));
    frame.add(src);
    frame.setVisible(true);
    } public static void main(String args[])
    {
    new JTableDemo();
    }
    }class MyTableModel extends AbstractTableModel 
    {
    private String[] columnNames = { "First Name", "Favorite Color", }; private Object[][] data = { 
    { "Mary", new ImageIcon("D:\\tbl.png") },
    { "Alison", new ImageIcon("D:\\pause.png") },
    ① { new ImageIcon("D:\\pause.png") , "Alison" },
    { "Kathy", new ImageIcon("D:\\play.png") },
    { "Sharon", new ImageIcon("D:\\tbl.png") },
    { "Philip", new ImageIcon("D:\\pause.png") }, 
    ② { "Philip1" , "dddd"} ,
    ③ { "Philip2", new JLabel(new ImageIcon("D:\\tbl.png")) } 
    }; public int getColumnCount() 
    {
    return columnNames.length;
    } public int getRowCount()
    {
    return data.length;
    } public String getColumnName(int col)
    {
    return columnNames[col];
    } public Object getValueAt(int row, int col) 
    {
    return data[row][col];
    } public Class getColumnClass(int c) 
    {
    if (c == 1)
    {
    System.out.println("---" + getValueAt(0, c).getClass());
    }

    return c == 1 ? Icon.class : Object.class;
    } public boolean isCellEditable(int row, int col) 
    {
    if (col < 1) 
    {
    return false;

    else 
    {
    return true;
    }
    } public void setValueAt(Object value, int row, int col) 
    {
    data[row][col] = value;
    fireTableCellUpdated(row, col);
    }
    }class ImageRenderer extends DefaultTableCellRenderer
    {
    public Component getTableCellRendererComponent(JTable table, Object value,
    boolean isSelected, boolean hasFocus, int row, int column) 
    {
    super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
    row, column);

    if (value instanceof Icon)
    {
    this.setIcon((Icon) value); if (isSelected)
    setBorder(new LineBorder(Color.red));

    else if (value instanceof String)
    setText((String) value);
    else
    setText(""); return this;
    }
    }
      

  3.   

    是不是与JDK有关呀,我用的1.6的。4楼的同学用的是什么版本呀?