JAVA: поместите изображение в jTable Cell - PullRequest
3 голосов
/ 11 июля 2010

Мне нужно отобразить изображение в одной из ячеек 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 ]

6 голосов
/ 11 июля 2010

JTable уже предоставляет рендерер по умолчанию для изображений. Вам просто нужно указать таблице, какой тип данных содержится в каждом столбце, и он выберет лучший рендерер:

a) переопределить метод getColumnClass () JTable или TableModel для возврата класса данных в столбце. В этом случае вы должны вернуть Icon.class.

b) добавить ImageIcon к модели таблицы.

Теперь JTable будет использовать средство визуализации значков по умолчанию для этого столбца.

1 голос
/ 11 июля 2010

Хмм: jTable1.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer()); возможно?

Вот соответствующий фрагмент кода быстрого теста, который я собрал, чтобы быстро проверить мои предположения.Он отображает значки из папки (предполагается, что все файлы в папке являются значками, поэтому вы должны проверить его с помощью чего-то вроде подкаталога темы значков XDG).Сначала установите модель таблицы, затем добавьте средство визуализации ячеек в столбцы:

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();
...