在DefaultListModel中添加类时,是否保存了toString或整个类的值?

时间:2014-02-16 12:53:21

标签: java swing jlist defaultlistmodel

新手在这里。

当我在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;
    }
}
}

1 个答案:

答案 0 :(得分:0)

对我来说很好。是什么让你觉得它不起作用?您需要在列表中选择一个项目才能按下按钮,您将获得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);
         }
     }
 });

请参阅How to Write Event Listeners,您将遇到可用于不同组件的可能侦听器。由于GUI是事件驱动的,你应该花时间学习它们中的大部分。