为了账号安全,请及时绑定邮箱和手机立即绑定

如何将图像插入JTable单元格

如何将图像插入JTable单元格

慕侠2389804 2019-11-20 09:53:06
有人可以向我指出如何向Java Table单元中添加图像的正确方向。
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

JTable已经为图标提供了默认的渲染器。您只需要告诉表在给定列中存储了哪些数据,以便它可以选择适当的渲染器。这是通过重写getColumnClass(...)方法来完成的:


import java.awt.*;

import javax.swing.*;

import javax.swing.table.*;


public class TableIcon extends JPanel

{

    public TableIcon()

    {

        Icon aboutIcon = new ImageIcon("about16.gif");

        Icon addIcon = new ImageIcon("add16.gif");

        Icon copyIcon = new ImageIcon("copy16.gif");


        String[] columnNames = {"Picture", "Description"};

        Object[][] data =

        {

            {aboutIcon, "About"},

            {addIcon, "Add"},

            {copyIcon, "Copy"},

        };


        DefaultTableModel model = new DefaultTableModel(data, columnNames)

        {

            //  Returning the Class of each column will allow different

            //  renderers to be used based on Class

            public Class getColumnClass(int column)

            {

                return getValueAt(0, column).getClass();

            }

        };

        JTable table = new JTable( model );

        table.setPreferredScrollableViewportSize(table.getPreferredSize());


        JScrollPane scrollPane = new JScrollPane( table );

        add( scrollPane );

    }


    private static void createAndShowGUI()

    {

        JFrame frame = new JFrame("Table Icon");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new TableIcon());

        frame.setLocationByPlatform( true );

        frame.pack();

        frame.setVisible( true );

    }


    public static void main(String[] args)

    {

        EventQueue.invokeLater(new Runnable()

        {

            public void run()

            {

                createAndShowGUI();

            }

        });

    }


}


查看完整回答
反对 回复 2019-11-20
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

要么先创建imageicon:


ImageIcon icon = new ImageIcon("image.gif");

table.setValueAt(icon, row, column);

或者,您可以尝试覆盖图标字段的渲染器:


static class IconRenderer extends DefaultTableCellRenderer {

  public IconRenderer() { super(); }


  public void setValue(Object value) {

    if (value == null) {

      setText("");

    }

    else

    {

      setIcon(value);

    }

}


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 749 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信