gpt4 book ai didi

Java 多选 - 在项目中添加名称/对象对 (JList)

转载 作者:行者123 更新时间:2023-12-01 14:38:32 24 4
gpt4 key购买 nike

我正在尝试使用JList在Java Swing应用程序中实现多选选项,下面是我的代码

// Create some items to add to the list
String listData[] =
{
"Item 1",
"Item 2",
"Item 3",
"Item 4"
};


JList listbox = new JList( listData );

现在,我可以看到如下所示的多选选项

enter image description here

我添加了一个 Action 监听器来获取所选项目,但现在我只能获取文本“Item 1”,但是我是否可以将一个对象与每个项目关联起来得到它当用户选择它时?

更新:

实际上,我正在尝试排序一种存储项目的方法,就像在 html Object.getName() 标签中一样,以便用户查看名称,当他选择它时,通过操作监听器,我们可以获得所选项目的对象。

最佳答案

而不是实例化 <a href="http://docs.oracle.com/javase/6/docs/api/javax/swing/JList.html#JList%28java.lang.Object%5b%5d%29" rel="noreferrer noopener nofollow">JList</a>String数组,用您选择的对象数组实例化它。确保您覆盖 toString方法,因为这就是将要绘制的内容。例如:

public class Item {

private int id;
private String name;

public Item(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

public String getName() {
return name;
}

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

如果Item是数据模型的一部分,您可以将其添加到 JList 模型中,如下所示:

public class AppJList extends JFrame {

public AppJList() {
super("JList model test");
initUI();
}

public Item[] initModel() {
Item[] model = new Item[3];
for (int i = 0; i < model.length; i++) {
model[i] = new Item(i, "text " + i);
System.out.println(i);
}
return model;
}

public JPanel initMainPanel() {
JPanel jpanel = new JPanel();
JList jList = new JList(initModel());
jList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
JList list = ((JList) e.getSource());
Item selected = (Item) list.getModel().getElementAt(list.getSelectedIndex());
System.out.println("selected item with id: " + selected.getId());
}
}
});
jpanel.add(jList);
return jpanel;
}

public void initUI() {
this.setPreferredSize(new Dimension(200, 200));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(new JScrollPane(initMainPanel()));
this.setLocationByPlatform(true);
this.pack();
}

public static void main(String[] args) {
// SwingUtilities.invokeLater
// or
EventQueue.invokeLater(new Runnable() {
public void run() {
new AppJList().setVisible(true);;
}
});
}
}

如果您想更好地控制列表呈现,请添加自定义 ListCellRenderer :

     jList.setCellRenderer(new ListCellRenderer() {

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Item toBeRendered = (Item)list.getModel().getElementAt(index);
return new JLabel(toBeRendered.getId() +":"+toBeRendered.getName());
}
});

initMainPanel方法。有关详细说明,请参阅这些教程:

关于Java 多选 - 在项目中添加名称/对象对 (JList),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com