将图像图标设置为特定单元格jTable

时间:2015-03-21 16:59:39

标签: java swing jtable

我是Jtable swing中的新手,我想将图像图标设置为Jtable的特定单元格,

所以我尝试了以下代码。

ImageIcon addIcon = new ImageIcon("addIcon.gif"); //addIcon.gif is stored in the resource packaage
table.setModel(new javax.swing.table.DefaultTableModel
    (
        new Object [][]
        {
            { 
                rowNumber, null, null, null,addIcon
            },
            {
                null,null ,"Total" ,"0.0","Get Total"
            }
        },
        new String [] 
        {
            "No.", "Item", "Weight", "Amount","#"
        }
    )
        {
            @Override
            public Class<?> getColumnClass(int c) 
            {
                return getValueAt(0, c).getClass();
            }
        }
    );

但是我没有使用Icon,而是获得了#34; addIcon.gif&#34;该jTable单元格中的字符串。 我在这里犯的错是什么。

请帮忙。

2 个答案:

答案 0 :(得分:1)

您需要实现自己的TableCellRenderer:https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableCellRenderer.html。表模型只保存图标,没有绘图。绘图由单元格渲染器完成(用于分隔UI和数据)。另请参阅有关自定义单元格渲染器的JTable教程:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#renderer

答案 1 :(得分:1)

您无法覆盖getColumnClass(...)方法,因为该类将用于确定表格中给定列的所有行的渲染器。

对于特定的单元格渲染,您可以覆盖表格的getCellRenderer(...)方法:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.table.*;

public class SSCCE extends JPanel
{
    public SSCCE()
    {
        ImageIcon addIcon = new ImageIcon("copy16.gif");

        String[] columnNames = {"No.", "Item", "Weight", "Amount","#"};

        Object[][] data =
        {
            {"123", null, null, null, addIcon},
            {null, null ,"Total" ,"0.0", "Get Total"}
        };

        DefaultTableModel model = new DefaultTableModel(data, columnNames);

        JTable table = new JTable(model)
        {
            @Override
            public TableCellRenderer getCellRenderer(int row, int column)
            {
                int modelColumn = convertColumnIndexToModel(column);

                if (modelColumn == 4 && row == 0)
                {
                    return getDefaultRenderer( Icon.class );
                }
                else
                    return super.getCellRenderer(row, column);
            }
        };

        add( new JScrollPane( table ) );
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new SSCCE() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

这是SSCCE的示例。所有问题都应包括SSCCE以证明您的问题。