繁体   English   中英

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

[英]How to create a JList that contains an object which has more than one value? e.g. Price, Weight, Colour etc

我几乎是编程的新手,所以这似乎是一个非常愚蠢的问题,我已经尝试了一段时间,但是却无法解决。

但是我想知道JList对象是否可以存储多个值,因此当我单击列表中的对象时,不同的值(例如价格,重量,颜色等)将显示在JTextField的下面。清单。

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

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

提前致谢!:)

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

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

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

是&否-但是,是比没有更多。 解释:

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

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

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

JList可以将任何Object作为其项目成员; 列表中显示的是该对象的toString()方法中的字符串。 因此,您可以使Object的任何子类具有任意数量的字段,并重写toString()以返回要在列表中看到的任何字符串。

当然,您可能需要一个类来存储对象的状态/字段。

这是一个大致显示您想要的课程。

选择该项目后,将显示一个对话框,显示该项目的特征。

在您将要制作的程序中,可以重现相同的行为。

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);
    }
}

之前

在此处输入图片说明


在此处输入图片说明

有可能的。

  1. 构建一个模型类,其中包含您上面为每个项目提到的属性。
  2. 实现一个ListCellRenderer来显示每个项目的项目名称(和价格),并将其实例用于Starters-,Mains-和Desserts-List。 DefaultListCellRenderer是一个很好的开始。 将项目放入ListModel并将其设置为JList
  3. 对右侧的清单清单执行相同的操作。
  4. 添加一个ListSelectionListener ,它通知您有关最后选择的项目。

当模型增长时,您开始想知道如何处理所有这些侦听器并传播更改,开始寻找进程中的EventBus

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM