【问题标题】:Can I combine two DefaultListModels?我可以结合两个 DefaultListModels 吗?
【发布时间】:2016-03-05 05:38:20
【问题描述】:

我正在尝试在 java 中组合两个 defaultListModel,这样我就可以将该模型设置为 JList。该程序基本上是使用 GUI 在购物车中添加和删除项目。当我按下添加按钮时,它不应该从购物车中删除商品,而是添加到该列表中。

这是我在 addButton 块中的代码:

DefaultListModel booksToAdd =  new DefaultListModel();
booksToAdd.addElement(availableBooks.getSelectedValuesList());

DefaultListModel booksAdded = new DefaultListModel();
booksAdded.addElement(shoppingCart.getModel());


// this is where it does not work.  I know I cannot just add these two, but I need
//some way to combine them.

shoppingCart.setModel(booksAdded + booksToAdd);

【问题讨论】:

    标签: java swing jlist defaultlistmodel


    【解决方案1】:

    基本的答案是做类似...

    for (int index = 0; index < from.getSize(); index++) {
        to.addElement(from.getElementAt(index));
    }
    

    可以封装在方法中...

    protected static <T> void addTo(ListModel<T> from, DefaultListModel<T> to) {
        for (int index = 0; index < from.getSize(); index++) {
            to.addElement(from.getElementAt(index));
        }
    }
    

    这将使它更易于使用,例如...

    DefaultListModel booksToAdd = new DefaultListModel();
    DefaultListModel booksAdded = new DefaultListModel();
    //...
    DefaultListModel combined = new DefaultListModel();
    
    addTo(booksToAdd, combined);
    addTo(booksAdded, combined);
    

    现在,如果你经常做这种事情,你可以设计自己的ListModel,它可以通过构造函数获取一个或多个ListModels,并将它们的元素添加到你的元素中和/或提供“添加”方法来做到这一点。无论如何,基本思想保持不变

    【讨论】:

    • 谢谢你的作品!只是一个问题,当结果回来时,它也给了我一些类似于 javax.swing.JList$3@43692750 的结果。有没有办法摆脱这个?
    • 输出表明您使用对象的toString 方法,您如何使用生成的JList 所以它会打印出来
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2023-03-26
    • 2018-12-11
    • 2023-03-19
    相关资源
    最近更新 更多