【发布时间】:2016-01-08 13:49:33
【问题描述】:
我有以下问题:我目前有几个代表各种植物和动物的类,它们都有基类“有机体”,它们是世界的一部分(另一个类,包含有机体的“2D”容器或空字段 - 有点像世界的 2D 地图)。只有 1 个有机体可以同时占据一个世界槽。
我想要的是绘制这个世界的地图。为了做到这一点,我创建了一个 JTable,它使用世界的 2D 容器作为数据源。现在的问题是,我不知道如何让 JTable 使用类自己的方法来绘制单元格。
每个类都有它的方法,它返回一个代表它的图像:
@Override public ImageIcon drawing(){
return new ImageIcon("Guarana.png");
}
我的表有以下可用组件:
private String[] columnNames;
private Object[][] data;
我已经创建了自己的表格模型(按照此处的教程:https://docs.oracle.com/javase/tutorial/uiswing/components/table.html)
所以表的创建是这样的:
model = new MyTableModel(testowyString, organizmy);
JTable table = new JTable(model);
table.setFillsViewportHeight(true);
table.setDefaultRenderer(Organizm.class, new IconRenderer());
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBounds(210, 0, 780, 900);
add(scrollPane);
如您所见,我尝试创建自己的 IconRenderer(但由于某种原因 JTable 仍然不绘制图标):
公共类 IconRenderer 扩展 DefaultTableCellRenderer {
ImageIcon sheepIcon = new ImageIcon("Owca.png");
ImageIcon wolfIcon = new ImageIcon("Wilk.png");
ImageIcon mouseIcon = new ImageIcon("Mysz.png");
ImageIcon chickenIcon = new ImageIcon("Kurka.png");
ImageIcon turtleIcon = new ImageIcon("Zolw.png");
ImageIcon grassIcon = new ImageIcon("Trawa.png");
ImageIcon guaranaIcon = new ImageIcon("Guarana.png");
ImageIcon emptyIcon = new ImageIcon("Pusty.png");
public IconRenderer() { super(); }
public void setValue(Organizm organizm) {
setIcon((organizm == null) ? ikonkaPusty : organizm.rysowanie());
}
}
(是的,这里的图标是我旧代码的一部分,当每个类都没有返回它的图标时)
总结一下:我想让它在 JTable 绘制地图时使用链接到单元格的类的现有方法绘制图标。
【问题讨论】:
标签: java swing icons tablecellrenderer