如何创建包含具有多个值的对象的JList?例如价格,重量,颜色等

时间:2016-04-01 14:05:52

标签: java swing jtextfield jlist

我几乎是编程的新手,所以这看起来像是一个非常愚蠢的问题,我一直试图这样做一段时间,但我无法理解它。

但是我想知道JList对象是否可以存储多个值,所以当我点击列表中的对象时,价格,重量,颜色等不同的值会显示在某些值中。 JTextField位于列表下方。

然后可以将JList对象添加到另一个JList中吗?

我一直在研究如何做到这一点,但我似乎无法在任何地方找到它。有没有更简单的方法来做到这一点?

提前致谢!)

所以这基本上就是我想要的样子:

http://i.stack.imgur.com/lXclt.png

4 个答案:

答案 0 :(得分:3)

  

但是我想知道JList对象是否有可能存储多个值,所以当我点击列表中的对象时,不同的值如价格,重量,颜色等等。

是&不 - 但更多的是肯定而不是否定。解释:

这里需要定义一个封装该信息的新类。它可能类似于“菜单项”。那个(让我们滚动)MenuItem类然后有字段来存储该菜单项的描述,价格,卡路里和其他属性。

然后,只需将列表配置为处理MenuItem。如果类的toString()方法显示您希望在列表中显示的所有信息,则可能不需要对其进行配置。否则,请使用自定义渲染器来准确显示所需内容。

其余的,在字段中显示属性并从列表(MenuList)移动到列表(MealOrder)非常简单,并在相关教程中介绍。

答案 1 :(得分:1)

JList可以将任何Object作为其项目成员;列表中显示的是该对象的toString()方法中的字符串。因此,您可以创建任何可以包含任意数量字段的Object子类,并覆盖toString()以返回您希望在列表中看到的任何字符串..

答案 2 :(得分:1)

当然,你需要的是一个存储对象状态/字段的类。

这是一个大致显示你想要的类。

选择项目后,会出现一个对话框,显示其特征。

在您正在制作的节目中,同样的行为是可以重现的。

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Test {
    public static class Item {
        String name;
        double price;
        double weight;
        Color color;

        public Item(String n,double p, double w, Color c){
            name = n;
            price = p;
            weight = w;
            color = c;
        }

        public String extendedToString() {
            return name + " " + price + " " + weight + " " + color;
        }

        @Override
        public String toString() {
            return this.name;
        }
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        Item i = new Test.Item("myItem", 5d, 2d, Color.black);
        JList<Item> l = new JList<Item>(new Item[]{i});
        l.addListSelectionListener(new ListSelectionListener(){

            @Override
            public void valueChanged(ListSelectionEvent e) {
                JList l = (JList) e.getSource();
                Item item = (Item) l.getSelectedValue();
                JOptionPane.showMessageDialog(f, item.extendedToString());
            }

        });
        f.add(l);
        f.setSize(500, 500);
        f.setVisible(true);
    }
}

之前

enter image description here

enter image description here

答案 3 :(得分:1)

有可能。

  1. 构建一个模型类,其中包含上面提到的每个项目的属性。
  2. 实现 ListCellRenderer 以显示每个项目的项目名称(和价格),并将其实例用于Starters-,Mains-和Desserts-Lists。 DefaultListCellRenderer 是一种很好的开始方式。将项目放在 ListModel 中,并将其设置为 JList
  3. 对右侧的帐单列表执行相同的操作。
  4. 添加 ListSelectionListener ,通知您最后选择的项目。
  5. 当您的模型增长并且您开始想知道如何处理所有这些侦听器并传播更改时,请开始查找正在进行的 EventBus