Java 为JTable中的每一行显示不同的图像
我正在为我的项目构建一个应用程序来管理商店的产品。我正面临一个问题,我真的需要你的想法来解决它 我使用DefaultTableCellRenderer在主屏幕上成功地显示了产品基本信息表中的图像。但我只能为所有产品显示一个图像。每个产品都有不同的图像,因此我需要在product basic info JTable中为每一行显示不同的图像 这是我的一些作品 这是我的DefaultTableCellRenderer扩展类:Java 为JTable中的每一行显示不同的图像,java,swing,jtable,icons,abstracttablemodel,Java,Swing,Jtable,Icons,Abstracttablemodel,我正在为我的项目构建一个应用程序来管理商店的产品。我正面临一个问题,我真的需要你的想法来解决它 我使用DefaultTableCellRenderer在主屏幕上成功地显示了产品基本信息表中的图像。但我只能为所有产品显示一个图像。每个产品都有不同的图像,因此我需要在product basic info JTable中为每一行显示不同的图像 这是我的一些作品 这是我的DefaultTableCellRenderer扩展类: class ImageRenderer extends DefaultTab
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;
}
非常感谢。无需创建自定义渲染器。JTable已经支持渲染器显示图标。因此,您需要做的就是:
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;
}
public类getColumnClass(int列)
{
对于(int row=0;row
您总是在设置相同的图像:SDon不使用stBounds,它没有任何效果,因为它取决于表来确定渲染器的位置和大小。您是否有将
product
及其image
连接在一起的东西?是什么将产品链接到实际图片?照片存放在哪里?你能告诉我更多细节吗?我还是无法在脑海中建立你的想法关于什么的细节?你还不明白什么?我还在研究如何告诉表使用你说的渲染。你知道,这对我来说是很新的。我告诉过你要重写什么方法,并给了你要添加到模型中的代码。
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)
)
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;
}