gpt4 book ai didi

java - 不断在 jTable 上获取相同的图像

转载 作者:行者123 更新时间:2023-12-01 11:14:14 25 4
gpt4 key购买 nike

imgPath 变量在控制台中不断打印不同的链接。但它只给出每行中的最后一个图像(最后分配的链接的图像)。

private void fillTable(){
try {
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
ArrayList<Cab> allCabs = ServerConnector.getInstance().getCabController().getAllCabs();
for (Cab cab : allCabs) {
Object[] row = {cab.getId(), "", cab.getLicenceNo()};
dtm.addRow(row);
imgPath = cab.getImgLink();
Sysytem.out.println(imgPath);
jTable1.getColumnModel().getColumn(1).setCellRenderer(new ImageRenderer());
}

} catch (ClassNotFoundException ex) {
Logger.getLogger(NewJFrame4.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(NewJFrame4.class.getName()).log(Level.SEVERE, null, ex);
} catch (NotBoundException ex) {
Logger.getLogger(NewJFrame4.class.getName()).log(Level.SEVERE, null, ex);
}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class ImageRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected,boolean hasFocus, int row, int column){
JLabel label = new JLabel();
if (value!=null) {
label.setHorizontalAlignment(JLabel.CENTER);
label.setIcon(new ImageIcon(imgPath));
}
return label;
}
}

最佳答案

But it only gives the last image(image of the last assigned link) in every row.

一列只有一个渲染器。当渲染单元格时,渲染器引用“imgPath”变量(一次只能包含一个引用),这当然是您分配给它的最后一个值。

如果你想在表格中渲染图像,那么你应该将 ImageIcon 存储在 TableModel 中。因此,您应该将图标添加到 TableModel,如下所示:

String imgPath = cab.getImgLink();
Object[] row = {cab.getId(), new ImageIcon(imgPath), cab.getLicenceNo()};
dtm.addRow(row);

然后,当您创建DefaultTableModel时,您需要重写TableModel的getColumnClass()方法,JTable将使用默认渲染器来显示图标,因此您不需要编写自定义渲染器。

这是一个简单的例子:

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableIcon extends JPanel
{
public TableIcon()
{
Icon aboutIcon = new ImageIcon("about16.gif");
Icon addIcon = new ImageIcon("add16.gif");
Icon copyIcon = new ImageIcon("copy16.gif");

String[] columnNames = {"Picture", "Description"};
Object[][] data =
{
{aboutIcon, "About"},
{addIcon, "Add"},
{copyIcon, "Copy"},
};

DefaultTableModel model = new DefaultTableModel(data, columnNames)
{
// Returning the Class of each column will allow different
// renderers to be used based on Class
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
JTable table = new JTable( model );
table.setPreferredScrollableViewportSize(table.getPreferredSize());

JScrollPane scrollPane = new JScrollPane( table );
add( scrollPane );
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("Table Icon");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TableIcon());
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}

}

关于java - 不断在 jTable 上获取相同的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com