如何在Java中的JList中显示数组列表?

时间:2015-01-03 15:15:17

标签: java swing arraylist drag-and-drop jlist

我有一个arraylist并希望使用gui在Jlist上显示它,我使用拖放来制作表单,所以我需要动态填充列表。 我试图进入Jlist的属性并使模型是一个自定义代码,但发生的问题是数组列表从文本文件中获取其元素,这意味着当我想填充数组列表时,我应该调用一个方法其中一个参数是文件名。 当使用这个方法时,尝试使用catch并使用shohld,但是当我设置Jlist的模型时,它会使用它! 我该怎么做才能使我的数组列表显示在表单上?

    public static ArrayList<Beverage> readBeverageTextFile(String fileName) throws FileNotFoundException, IOException {
    ArrayList<Beverage> bevList = new ArrayList<>();
    Reader reader = new FileReader(fileName);
    BufferedReader buf = new BufferedReader(reader);
    String line;
    while (true) {

        line = buf.readLine();
        if (line == null) {
            break;
        }

        try {
            StringTokenizer tokenizer = new StringTokenizer(line, "|");

            String name = tokenizer.nextToken();
            //System.out.println("The name is " + name);
            String desc = tokenizer.nextToken();
            //System.out.println("The dest " + desc);
            double price = Double.parseDouble(tokenizer.nextToken());
            //System.out.println("The Price is " + price);
            double quantity = Double.parseDouble(tokenizer.nextToken());
            //System.out.println("The Quantity is " + quantity);

            double ex = Double.parseDouble(tokenizer.nextToken());
            double pac = Double.parseDouble(tokenizer.nextToken());
            double capacity = Double.parseDouble(tokenizer.nextToken());
            //System.out.println("The Capacity is  " + capacity);
            bevList.add(new Beverage(capacity, name, desc, quantity, price, ex, pac));

        } catch (NumberFormatException ex) {
            Logger.getLogger(Beverage.class.getName()).log(Level.WARNING, "error");
        }
    }
    return bevList;
}

1 个答案:

答案 0 :(得分:2)

如果您只使用ArrayList将数据读入并在JList中显示,那么请不要使用ArrayList。而是使用DefaultListModel,通过调用addElement(...)将其填入您的文件数据,然后通过setModel(...)设置JList的模型并填写数据模型。

如果另一方面你绝对必须使用ArrayList来保存你的数据,那么我看到你有两个可能的选择:

  • 使用您的ArrayList,但也创建一个DefaultListModel,并使用for循环使用ArrayList数据填充列表模型。在不利方面,您的数据将保存在两个集合中,并且无法保证数据将保持完全同步。
  • 使用ArrayList作为数据核创建AbstractListModel。这将是更简洁的方法,但需要您付出更多努力,包括确保您调用适当的fireXXX(...)通知方法。

有关详细信息,请参阅How to use Lists教程。


修改 关于代码@again,使用DefaultListModel代替ArrayList。键也将是您的对象在JList中的显示方式,为了实现这一点,您需要为Beverage类提供一个不错的toString()方法,否则(并且更好)您应该给JList一个体面的ListCellRenderer。