jList在特定情况下不显示数据

时间:2015-10-23 09:27:55

标签: java jlist

在我的程序中,我有一个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");

问题仍然存在。

2 个答案:

答案 0 :(得分:0)

详细了解此行中发生的情况,以及是否使用正确的数据正确初始化jListPaiement

jListPaiement.setModel(new MyListModel(ls.getDb().getListePaiements()));

似乎在此行setSelectedValue()找不到元素mp

jListPaiement.setSelectedValue(mp, true);

答案 1 :(得分:0)

我终于找到了解决方案。 我没有使用自己的List Model,而是使用了DefaultListModel,一切正常。自从我参与这个项目以来已经很长时间了,我不记得为什么我选择创建自己的列表模型类。

即使它现在很难用,我仍然不明白我自己的课程中缺少什么(MyListModel)使它无法正常工作..