- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用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 );
现在,我可以看到如下所示的多选选项
我添加了一个 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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!