【问题标题】:how to show an array list in a JList in Java?如何在 Java 中的 JList 中显示数组列表?
【发布时间】:2015-01-03 15:15:17
【问题描述】:

我有一个数组列表,想使用 gui 在 Jlist 上显示它,我正在使用拖放来制作表单,所以我需要动态填充列表。 我试图进入 Jlist 的属性并使模型是自定义代码,但发生的问题是数组列表从文本文件中获取其元素,这意味着当我想填充数组列表时,我应该调用一个方法它的参数之一是文件名。 使用此方法时,应使用 try and catch ,但是当我设置 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;
}

【问题讨论】:

  • 你现在有什么代码?
  • 这个:"When using this method try and catch shohld be used but when I set the model of the Jlist it minds use it!" 不清楚。请准确说明您的代码可能遇到的问题,并请显示您的代码(正如@laune 也要求的那样)。
  • 我发布了填充arrarylist的方法,这个数组列表我想将它显示为 Gui 中的任何组件,它不重要但我不知道如何
  • @HovercraftFullOfEels 我有一个名为 deleteProducts 的表单,想在其中显示数组列表,当我将 Jlist 的模型制作为自定义代码时,它将在生成的代码中由 java 更改并编写jList1.setModel(Beverage.readBeverageTextFile("Beverage.txt").toArray() 并且无法尝试捕获文件未找到的异常。

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


【解决方案1】:

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

另一方面,如果您绝对必须使用 ArrayList 来保存您的数据,那么我认为您有两种可能的选择:

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

更多详情请查看How to use Lists教程。


编辑 关于您的代码,@again 代替 ArrayList,使用 DefaultListModel。关键还在于您的对象在 JList 中的显示方式,要做到这一点,您需要为 Beverage 类提供一个不错的 toString() 方法,或者(更好)您应该为 JList 提供一个不错的 ListCellRenderer。

【讨论】:

  • GI 将在 arraylist 上执行另一个操作,删除和排序..等。我可以在 DefaultListModel 中执行此操作吗? @HovercraftFullOfEels
  • @user3159060:删除、使用、排序,而不是自己。为此,您可能希望创建一个以 ArrayList 作为其数据核心的 AbstractListModel。然后,您可以对该 ArrayList 进行排序。
猜你喜欢
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 2010-12-09
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多