如何在没有EventListener的情况下以编程方式在JList中添加元素?

时间:2012-10-25 04:55:55

标签: java swing netbeans event-handling jlist

我想从用户定义的函数中添加JList中的元素,该函数不是任何事件监听器。

我有JList为:

DefaultListModel listModel = new DefaultListModel();
JList jList1 = new JList(listModel);
listModel.add(0,"Welcome");
listModel.addListDataListener(new MyListDataListener());

class MyListDataListener implements ListDataListener {
        public void contentsChanged(ListDataEvent e) {
             //DefaultListModel model = (DefaultListModel)e.getSource();
            //jList1.setModel(listModel);
            System.out.println("inside content");
        }
        public void intervalAdded(ListDataEvent e) {
           // jList1.setModel(listModel);
            jList1.setListData(a);
            //System.out.println("inside added"+e.getSource()+" "+jList1.getModel());

        }
        public void intervalRemoved(ListDataEvent e) {

        }
    }

因为,只要我想从鼠标点击的监听器添加元素,就会调用intervalAdded,如

private void sendButtonMouseClicked(java.awt.event.MouseEvent evt) {                                        
        // TODO add your handling code here:
        if(!inputField.getText().isEmpty())
        {
            message=myName+" : "+inputField.getText();


        listModel.add(GlobalVariable.i,message);


        inputField.setText(null);
        GlobalVariable.i++;
        }

    }

也来自我的用户定义函数,即

public void messagereceived(String s)
    {
                 listModel.add(GlobalVariable.i,message);
                 GlobalVariable.i++;
}

但是listModel.setmodel()无论何时从messagereceived()函数调用都不起作用。

如何从此函数中添加JList中的元素?

1 个答案:

答案 0 :(得分:2)

  1. messagereceived,您没有致电listModel.setmodel(),而是listModel.add(GlobalVariable.i,message);
  2. 当您致电jList1.setListData(a);时,您隐含地在jList1上创建并设置新的ListModel。因此,当您修改listModel时,它不会反映在您的jList1
  3. GlobalVariable - >看起来像是一些古老的C代码风格的标志。恰当地使用对象。