java - 使用 excel 中的字符串作为目录来更改 JLabel 中的图像

标签 java swing jxl

我觉得这是有史以来最准确的标题,并且准确地表达了我的需要。我正在用 Java 制作纸牌游戏,并将所有纸牌统计数据加载到电子表格中。我正在使用 JXL api 读取电子表格,并从电子表格中各自的单元格中获取每张卡的统计信息,并将它们存储在 Deck 对象中,一切都工作得非常好,但是当我尝试使用 getImage 的字符串时() 返回,我不断得到一个空指针,但我不明白为什么。我将发布我认为相关的所有内容,如果需要更多内容,请告诉我。

第一部分来自 LoadCards 类,它加载电子表格并将数据附加到 Deck 对象。注意:我在这里只有一次尝试作为测试,以确保它有效,但没有。

public class LoadCards 
{
public Deck LoadCards()
{
    Workbook cardList  = null;
    try
    {
        cardList  = Workbook.getWorkbook(new File("C:\\DC Card Game\\src\\DCCardGame\\resources\\CardList.xls"));
    }
    catch (IOException e)
    {
        String message = "The file titled CardList.xls was not found.";
        String title = "File Not Found";
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    } catch (BiffException ex) 
    {
        String message = "File must have an extension of .xls";
        String title = "Incompatible CardList File";
        JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE);
    }        
        Sheet typeSheet = cardList.getSheet(0);
        Sheet equipmentSheet = cardList.getSheet(1);
        String equipmentType = typeSheet.getCell(0,1).getContents();
        Deck testCard= new Deck(equipmentSheet.getCell(0, 1).getContents(),equipmentType,Integer.parseInt(equipmentSheet.getCell(2,1).getContents()),Integer.parseInt(equipmentSheet.getCell(3,1).getContents()),Integer.parseInt(equipmentSheet.getCell(4,1).getContents()),equipmentSheet.getCell(5,1).getContents());

        return testCard;

最后一行为 Deck 构造函数构建一个对象,如下所示:

public Deck(String cardName, String type, int cost, int value, int power, String image)
{
    super();
}

Deck 扩展了 Card,所有适当的 getter/setter 都在其中。

public Card(String cardName, String type, int cost, int value, int power, String image)
{
    this.cardName = cardName;
    this.type = type;
    this.cost = cost;        
    this.value = value;        
    this.power = power;
    this.image = image;
}

在我的表单类中,这是我用来测试图像是否正常工作的代码(提示:它不工作。)它不断抛出 NullPointerException

LoadCards test = new LoadCards();
test.LoadCards();
ImageIcon testImage = new ImageIcon(getClass().getResource(test.LoadCards().getImage()));
extraLineupSlot1.setIcon(testImage);

我需要弄清楚如何纠正这个问题,以便我可以从电子表格中调用代表目录的字符串,该目录存储在 Deck/Card 对象的图像属性中,然后我可以调用它属性并更改与我制作的不同 JLabels 关联的图标。

最佳答案

听起来您可以获取字符串列表,但在获取相应的命名资源时遇到问题。在此相关example ,一个List<String>的名称与 List<ImageIcon> 共享一个共同索引用作存储在 JAR 中的资源的图像缓存。方法getImage(int index)从缓存中返回现有图像或通过 getResource() 加载图像备查。您可以比较一下您的方法。请参阅info对于 了解更多示例。

关于java - 使用 excel 中的字符串作为目录来更改 JLabel 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649262/

相关文章:

java - JXLS 公式未按指定字段对输出进行分组

java - Spring AMQP 处理已删除的队列

java - 如何更改GridLayout间距的颜色?

java - 如何在转换模板的 JXLS API 中动态合并单元格

java - JTable刷新

java - 数据库访问最佳实践 - 联系人列表

java - Apache POI 生成损坏的 Excel 文件

java - 使用synchronized时,Java如何确定哪个线程应该继续执行?

java - 如何防止 JTree 的默认 Cut 事件?

java - 获取对象数组的唯一列表