代码之家  ›  专栏  ›  技术社区  ›  Ariyan

JAVA:将图像放入jTable单元

  •  3
  • Ariyan  · 技术社区  · 15 年前

    我需要在其中一个jTable单元格中显示图像。
    我写的是:

    class ImageRenderer extends DefaultTableCellRenderer {
        JLabel lbl = new JLabel();
    
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {
            lbl.setText((String) value);
            lbl.setIcon(new ImageIcon("/home/ariyan/Desktop/71290452.jpg"));
            return lbl;
        }
    }
    

    然后用它做这个:

        jTable1.getColumn(0).setCellRenderer(new ImageRenderer());
    


    我该怎么做?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  6
  •   camickr    15 年前

    JTable已经为图像提供了默认渲染器。您只需要告诉表每列包含什么类型的数据,它就会选择最好的呈现程序:

    a) 重写JTable或TableModel的getColumnClass()方法以返回列中的数据类。在这种情况下,您应该返回一个Icon.class。

    b) 将ImageIcon添加到表模型。

    现在JTable将使用该列的默认图标呈现器。

        2
  •  1
  •   user268396    15 年前

    隐马尔可夫模型: jTable1.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer());

    下面是一些快速测试代码的相关摘录,我将它们放在一起以快速验证我的猜测。它显示文件夹中的图标(它假定文件夹中的所有文件都是图标,因此您应该使用XDG icon theme子目录之类的东西测试它)。首先安装表模型,然后在列上添加单元格呈现程序:

    class Renderer extends DefaultTableCellRenderer {
    
        @Override
        public Component getTableCellRendererComponent (JTable table,
                                                        Object value,
                                                        boolean isSelected,
                                                        boolean hasFocus,
                                                        int row, int column) {
            if(isSelected) {
                this.setBackground(table.getSelectionBackground());
                this.setForeground(table.getSelectionForeground());
            }
            else {
                this.setBackground(table.getBackground());
                this.setForeground(table.getForeground());
            }
            if(column == 0) {
                this.setText(list[row]);
            }
            else {
                // edit as appropriate for your icon theme
                this.setIcon(new ImageIcon("/usr/share/icons/default.kde4/16x16/apps/"+list[row]));
            }
            return this;
        }
    
    }
    class Model extends DefaultTableModel {
    
        @Override
        public boolean isCellEditable (int row, int column) {
            return false;
        }
    
        @Override
        public Object getValueAt (int row, int column) {
            return list[row];
        }
    
        @Override
        public int getRowCount () {
            return list.length;
        }
    
        @Override
        public int getColumnCount () {
            return 2;
        }
    
        @Override
        public String getColumnName (int column) {
            return column == 0? "Name" : "Preview";
        }
    
        @Override
        public Class<?> getColumnClass (int columnIndex) {
            return String.class;
        }
    }
    // edit base directory as appropriate for your icon theme of choice
    static String[] list=new File("/usr/share/icons/default.kde4/16x16/apps/").list();