【问题标题】:How to insert image from database to JTable如何将图像从数据库插入到 JTable
【发布时间】:2015-02-16 23:38:33
【问题描述】:

我尝试将我的图像从数据库插入到 JTable,但是无法显示。我该如何克服这个问题?

public void loadData(ArrayList<Monster> monsters) {
    /**
     * Collection of Cell Example : Gondar 45 56 78 4 Axe 34 67 90 5
     */
    Vector<Vector<String>> data = new Vector<Vector<String>>();
    for (Monster item : monsters) {
        Vector<String> dataRow = new Vector<String>();
        dataRow.add("" + new ImageIcon(getClass().getResource("/images/monster/"+item.getAvatarUrl())));
        dataRow.add("" + item.getName());
        dataRow.add("" + item.getHp());
        dataRow.add("" + item.getDp());
        dataRow.add("" + item.getAp());
        dataRow.add("" + item.getLevel());
        data.add(dataRow);
    }
    this.setDataVector(data, columnElement);
}

【问题讨论】:

  • 为了获得更好的帮助,请尽快发布 SSCCE/MCVE,简短、可运行、可编译,并在本地变量(而不是 JDBC)中使用 JTable/XxxTableModel 的硬编码值从 UIManager 获取图标 - UIManager.getIcon("OptionPane.错误图标")

标签: java database image swing jtable


【解决方案1】:

1) 似乎您从类路径而不是 db 中获得 Icon。 2)您需要将ImageIcon添加到TableModel中,但您添加的是String而不是那个。

您可以覆盖 TableModelgetColumnClass 方法以返回 Icon.class 以获得正确的列并将 ImageIcon 存储在该列中。例如:

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TestFrame extends JFrame {

    public static void main(String... s){
        new TestFrame();
    }

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        DefaultTableModel model = new DefaultTableModel(0,3){
            @Override
            public Class<?> getColumnClass(int columnIndex) {
                if(columnIndex == 1){
                    return Icon.class;
                }
                return super.getColumnClass(columnIndex);
            }
        };
        ImageIcon icon = new ImageIcon(TestFrame.class.getResource("1.png"));
        model.addRow(new Object[]{"1",icon,"2"});

        JTable t = new JTable(model);
        add(new JScrollPane(t));
    }

}

这是存储在第二列ImageIconTableModel 中的1 行,JTable 知道如何使用列类Icon 显示它。

【讨论】:

    猜你喜欢
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多