![](/img/trans.png)
[英]Is it more efficient to use the class, e.g. Hashtable than the interface, e.g. Map?
[英]How to create a JList that contains an object which has more than one value? e.g. Price, Weight, Colour etc
但是我想知道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);
}
}
有可能的。
当模型增长时,您开始想知道如何处理所有这些侦听器并传播更改,开始寻找进程中的EventBus 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.