在我的程序中,我有一个jList,我可以添加,删除,修改此Jlist中的项目。 我的问题是,如果我在选择jList中的项目之前单击我的添加按钮,则jList中的项目会消失。 (仅在apeareance中,因为它们实际上仍然在jList中)
如果在此之前,我在列表中选择了一个项目,那么一切正常。所以我的猜测是我的听众的“valueChanged()”方法正在做我自己不做的事情。
这是我的列表初始化,我在程序开始时调用:
public final void initList() {
jListPaiement.setModel(new MyListModel(ls.getDb().getListePaiements()));
final DecimalFormat df = new DecimalFormat("###.##");
jListPaiement.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent lse) {
MoyenPaiement mp = (MoyenPaiement) ((MyListModel) jListPaiement.getModel()).getElementAt(jListPaiement.getSelectedIndex());
jTextFieldFF.setText(df.format(mp.getFraisf()));
jTextFieldFV.setText(df.format(mp.getFraisv() * 100));
jTextFieldNomP.setText(mp.getNom());
jTextFieldFF.setVisible(true);
jTextFieldFV.setVisible(true);
jTextFieldNomP.setVisible(true);
jLabel1.setVisible(true);
jLabel6.setVisible(true);
jLabel7.setVisible(true);
jLabel8.setVisible(true);
jLabel11.setVisible(true);
jButtonSaveP.setVisible(true);
}
});
以下是添加按钮的代码:
private void jButtonAddPActionPerformed(java.awt.event.ActionEvent evt) {
MoyenPaiement mp = new MoyenPaiement("Nouveau", 0, 0);
((MyListModel) jListPaiement.getModel()).addElement(mp);
jListPaiement.setSelectedValue(mp, true);
jListPaiement.repaint();
}
MyListModel代码:
public class MyListModel extends AbstractListModel {
ArrayList list;
public MyListModel(ArrayList list) {
this.list = list;
}
@Override
public int getSize() {
return list.size();
}
@Override
public Object getElementAt(int i) {
return list.get(i);
}
public void addElement(Object o){
list.add(o);
}
public void deleteElement(Object o){
list.remove(o);
}
public void setElement(int i,Object o){
list.set(i, o);
}
public ArrayList getList() {
return list;
}
public void setList(ArrayList list) {
this.list = list;
}
}
非常感谢任何帮助。
由于
编辑:经过进一步研究,问题是当我将项目添加到我的模型时。
它正好在线:
((MyListModel) jListPaiement.getModel()).addElement(mp);
即使我添加了一个简单的字符串,例如:
((MyListModel) jListPaiement.getModel()).addElement("String");
问题仍然存在。
答案 0 :(得分:0)
详细了解此行中发生的情况,以及是否使用正确的数据正确初始化jListPaiement
。
jListPaiement.setModel(new MyListModel(ls.getDb().getListePaiements()));
似乎在此行setSelectedValue()
找不到元素mp
jListPaiement.setSelectedValue(mp, true);
答案 1 :(得分:0)
我终于找到了解决方案。 我没有使用自己的List Model,而是使用了DefaultListModel,一切正常。自从我参与这个项目以来已经很长时间了,我不记得为什么我选择创建自己的列表模型类。
即使它现在很难用,我仍然不明白我自己的课程中缺少什么(MyListModel)使它无法正常工作..