在DefaultListModel中添加类时,它是保存了toString的值还是保存了整个类



这里是新手。

当我在DefaultListModel中添加一个元素时,我使用了一个重写了toString的类。根据下面的示例代码,我希望在单击按钮btnid时显示所选项目的ID。

displayID下的命令似乎不起作用。请帮忙。谢谢

class SomeClass {
JFrame f = new JFrame("Sample");
JScrollPane sp = new JScrollPane();
DefaultListModel dlm = new DefaultListModel();
JList lst = new JList(dlm);
public SomeClass() {
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnadd = new JButton("Add");
JButton btnid = new JButton("View ID");
Container p = f.getContentPane();
sp.getViewport().add(lst,null);    
p.add(sp, BorderLayout.WEST);
p.add(btnadd, BorderLayout.EAST);
p.add(btnid, BorderLayout.SOUTH);
btnadd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dlm.addElement(new ElementDisplay(dlm.getSize(),"Element " + dlm.getSize()));  
}
});
btnid.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
displayID();
}
});
f.pack();
f.setVisible(true);    
}
private void displayID() {
ElementDisplay ed;
ed = dlm.getElementAt(lst.getSelectedIndex());    
System.out.println(ed.elementID);
}
public static void main(String args[]) {
SomeClass sc = new SomeClass();
}

class ElementDisplay {
public int elementID;
private String elementDescription;
public ElementDisplay(int pid, String pdesc) {
elementID=pid;     
elementDescription=pdesc;
}
@Override
public String toString() {
return elementDescription;
}
}
}

对我来说很好。你为什么认为它不起作用?你需要在列表中选择一个项目才能按下按钮,你会得到ArrayIndexOutOfBoundException

不依赖于按键,只需在JList中添加一个监听器即可。这样,只有当JList中的项目被选中时,它才会打印。无需按下按钮并尝试避开ArrayIndexOutOfBoundException

lst.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
JList list = (JList)e.getSource();
DefaultListModel model = (DefaultListModel)list.getModel();
ElementDisplay ed = (ElementDisplay) model.getElementAt(lst.getSelectedIndex());
System.out.println(ed.elementID);
}
}
});

请参阅如何编写事件侦听器,在其中您将遇到可用于不同组件的可能侦听器。由于GUI是事件驱动的,您应该花时间学习其中的大部分内容。

相关内容

  • 没有找到相关文章

最新更新