我尝试将我的图像从数据库插入JTable但是,它无法显示。我怎样才能克服这个问题?
public void loadData(ArrayList<Monster> monsters) {
/**
* Collection of Cell Example : Gondar 45 56 78 4 Axe 34 67 90 5
*/
Vector<Vector<String>> data = new Vector<Vector<String>>();
for (Monster item : monsters) {
Vector<String> dataRow = new Vector<String>();
dataRow.add("" + new ImageIcon(getClass().getResource("/images/monster/"+item.getAvatarUrl())));
dataRow.add("" + item.getName());
dataRow.add("" + item.getHp());
dataRow.add("" + item.getDp());
dataRow.add("" + item.getAp());
dataRow.add("" + item.getLevel());
data.add(dataRow);
}
this.setDataVector(data, columnElement);
}
答案 0 :(得分:1)
1)似乎你从classpath而不是db获得Icon
。
2)您需要将ImageIcon
添加到TableModel
,但是添加String
而不是{。}}。
您可以覆盖getColumnClass
的{{1}}方法,返回TableModel
以获取正确的列,并在该列中存储Icon.class
。例如:
ImageIcon
以下是存储import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TestFrame extends JFrame {
public static void main(String... s){
new TestFrame();
}
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
DefaultTableModel model = new DefaultTableModel(0,3){
@Override
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex == 1){
return Icon.class;
}
return super.getColumnClass(columnIndex);
}
};
ImageIcon icon = new ImageIcon(TestFrame.class.getResource("1.png"));
model.addRow(new Object[]{"1",icon,"2"});
JTable t = new JTable(model);
add(new JScrollPane(t));
}
}
的第二列TableModel
中的一行,ImageIcon
知道如何使用列类JTable
显示它。