java - 如何将图像添加到动态创建的 JTable

标签 java swing jtable

我有一个JTable我从 List<String> 动态创建的对象。我这样做可能完全错误,但它有效。我唯一无法开始工作的就是向某些单元格添加图像。

它所做的只是添加 ImageIcon对象名称作为单元格的字符串。请参阅下面我的代码。

private static Image doneImage = getIconImage("doneImage");
private static Image notDoneImage = getIconImage("notDoneImage");

private DefaultTableModel model = new DefaultTableModel(){
    @Override
    public Class<?> getColumnClass(int column){
        if ((column & 1) != 0 ){
            return ImageIcon.class;
        }else{
            return String.class;
        }
    }
};

initTables();

JTable table = new JTable();
table.setModel(model);

private void initTables(){  

    model.addRow(new Object[]{});

    int rowsToAdd = 0;
    int rowCount = 0;
    int columnId = 0;

    for(HouseObject aHouse : houses){
        for(RoomObject aRoom : aHouse.getRooms()){

            model.addColumn(null);
            model.addColumn(aRoom.getId());
            model.setValueAt(aRoom.getId(), 0, columnId);

            if (rowCount < aRoom.getEvents().size()){
                rowsToAdd = aRoom.getEvents().size() - model.getRowCount();
                for(int i = 0; i <= rowsToAdd; i++){
                    model.addRow(new Object[]{});
                }
                rowCount = model.getRowCount();
            }

            for(int i = 0; i < aRoom.getEvents().size(); i++){
                model.setValueAt(aRoom.getEvents().get(i).getId(), i+1, columnId);

                for(String houseDone : housesDone){
                    if(aRoom.getEvents().get(i).getId().contains(houseDone)){
                        model.setValueAt(doneImage , i+1, columnId+1); // this does not work
                    }else{
                        model.setValueAt(notDoneImage, i+1, columnId+1);
                    }
                }
            }

            columnId = columnId+2;
        }
    }
}

最佳答案

您需要为您的表格安装渲染器

这是渲染器:

public class IconTableCellRenderer extends DefaultTableCellRenderer {

    @Override
    protected void setValue(Object value) {
        if (value instanceof Icon) {
            setText(null);
            setIcon((Icon) value);
        } else {
            super.setValue(value);
        }
    }
}

所以你必须安装它:

JTable table = new JTable();
table.setModel(model);
table.setDefaultRenderer(ImageIcon.class, new IconTableCellRenderer());

关于java - 如何将图像添加到动态创建的 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47352175/

相关文章:

java - 文本区域中的上下移动按钮

java - 如何同时完成Firebase Storage Task和Firestore Task?

java - 如何使用 JOptionPane 内部迭代数组并显示自定义消息?

java - JTable 当前显示多少行?

java - Java 中 String.format 的 UnknownFormatConversionException

java - 使用 HikariCP 不会回滚事务

java - 将 JPanel 添加到 JFrame : java. lang.IllegalArgumentException 的问题:无法添加到布局:约束必须是字符串(或 null)

java - 如何使 Java 看起来像 Windows 程序?

java - fireTableDataChanged、重新验证和重绘后 jtable 不更新

java - 与 JTable 中的单元格渲染器交互