2013-09-11 2 views
0

Я создаю приложение для управления продуктом магазина для моего проекта. Я столкнулся с проблемой, и мне действительно нужна ваша идея, чтобы решить эту проблему.Показать различные изображения для каждой строки в JTable

Я успешно показываю изображение в основной информационной таблице продукта на главном экране с помощью DefaultTableCellRenderer. Но я могу показать только 1 изображение для всего продукта. Каждый продукт имеет другое изображение, поэтому мне нужно отображать различное изображение для каждой строки в базовой информации о продукте JTable.

Вот некоторые части моей работы.

Это мой DefaultTableCellRenderer расширенный класс:

class ImageRenderer extends DefaultTableCellRenderer { 
JLabel lbl = new JLabel(); 

ImageIcon icon = new ImageIcon("./src/comicbookandgamingzone/productpicture/NFS-Shift-2-Unleashed-Limited-Edition-Revealed-2.jpg"); 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
    boolean hasFocus, int row, int column) { 
lbl.setText((String) value); 
lbl.setIcon(icon); 
lbl.setBounds(0, 0, 100, 100); 
return lbl; 
} 
} 

Обычай продукт основная информация табличная модель

class ProductTableModel extends AbstractTableModel{ 
String[] colname = {"ID","Picture","Name","Cost","In stock"}; 
ArrayList<Product> list; 
public ProductTableModel(ArrayList<Product> prolist){ 
    this.list=prolist; 
} 
public String getColumnName(int col){ 
    return colname[col]; 
} 
@Override 
public int getRowCount() { 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    return list.size(); 
} 

@Override 
public int getColumnCount() { 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    return colname.length; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    switch(columnIndex){ 
     case 0: return list.get(rowIndex).ID; 
     case 1: return list.get(rowIndex).Picture; 
     case 2: return list.get(rowIndex).Name; 
     case 3: return list.get(rowIndex).Cost; 
     case 4: return list.get(rowIndex).Stock; 
     default : return null; 
    } 

... и в методе шоу результата

public void ShowResult(ArrayList<Product> list){ 
    tabProduct.setModel(new ProductTableModel(list)); 
    tabProduct.getColumnModel().getColumn(1).setCellRenderer(new ImageRenderer()); 
    tabProduct.setRowHeight(100); 
} 

Это мой скрипт SQL create table. Я сохраняю путь изображения продукта в базе данных

create table ProductDetails 
(
ProductID int identity (1,1) not null, 
ProductTypeID int foreign key references ProductType(TypeID), 
ProductName text, 
ProductPicture text, 
ProductCost float, 
ProductPoint int, 
ProductStock int, 
primary key (ProductID) 
) 

Большое спасибо.

+0

вы настраиваете всегда один и тот же образ: S – nachokk

+0

Не используйте stBounds, это не имеет никакого эффекта, как это он к столу, чтобы определить, где рендер должен быть положение и при чем size – MadProgrammer

+0

У вас есть что-то, что связывает «продукт» и его «образ» вместе? –

ответ

1

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

  1. хранить иконку в модели для каждой строки, так же как вы сохраняете другой текст для каждой строки.
  2. Переопределите метод getColumnClass() модели, чтобы сообщить таблице использовать средство визуализации значков. Что-то вроде:

    public Class getColumnClass(int column) 
    { 
        for (int row = 0; row < getRowCount(); row++) 
        { 
         Object o = getValueAt(row, column); 
    
         if (o != null) 
          return o.getClass(); 
        } 
    
        return Object.class; 
    } 
    
+0

Можете ли вы дать мне более подробную информацию, пожалуйста? Я до сих пор не могу построить свою идею в моем сознании –

+0

Подробная информация о чем? Что ты не понимаешь? – camickr

+0

Я все еще работаю над тем, как я могу заставить таблицу использовать рендеринг, как вы сказали. Вы знаете, это совершенно новое со мной. –