我想从用户定义的函数(不是任何事件监听器)在 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++;
}
}
也来 self 的用户定义函数,即
public void messagereceived(String s)
{
listModel.add(GlobalVariable.i,message);
GlobalVariable.i++;
}
但是 listModel.setmodel()
每当从 messagereceived() 函数调用时都不起作用。
如何通过该函数在 JList 中添加元素?
最佳答案
- 在
messagereceived
,你不是在打电话listModel.setmodel()
但是listModel.add(GlobalVariable.i,message);
- 当您调用
jList1.setListData(a);
时您正在jList1
上隐式创建并设置一个新的 ListModel 。因此,当您修改listModel
时,它不会反射(reflect)在您的jList1
上. -
GlobalVariable
-->看起来像一些古老的C代码风格的标志。适本地使用对象来代替。
关于java - 如何在没有 EventListener 的情况下以编程方式在 JList 中添加元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13061812/