簡體   English   中英

為JTable中的每一行顯示不同的圖像

[英]Show different image for each row in 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 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)
)

非常感謝你。

無需創建自定義渲染器。 JTable已經支持渲染器來顯示圖標。 因此,您需要做的是:

  1. 將圖標存儲在模型中的每一行中,就像存儲每一行​​的其他文本一樣。
  2. 重寫模型的getColumnClass()方法,以告知表使用Icon渲染器。 就像是:

     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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM