Avatar billede jnh Nybegynder
03. juni 2004 - 19:39 Der er 1 kommentar og
1 løsning

dataModel på JList

Hej alle

Jeg leder efter et simpelt eksempel på hvordan man bruger JList sammen med en dataModel, så listen automatisk opdateres, hvis dataModellen ( mit array ) ændres.

Håber i kan hjælpe

//Jesper
Avatar billede _carsten Nybegynder
03. juni 2004 - 21:04 #1
Dette er det simpleste jeg kan klare.


import java.util.ArrayList;
import java.util.Vector;
import javax.swing.AbstractListModel;
import javax.swing.ListModel;

public class TestJList extends javax.swing.JFrame {
   

    public TestJList() {
        model = new MyModel();
        initComponents();
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        list = new javax.swing.JList( data );
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();

        getContentPane().setLayout(new java.awt.FlowLayout());

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        list.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);
        list.setModel( model );
        jScrollPane1.setViewportView(list);

        getContentPane().add(jScrollPane1);

        jButton1.setText("Tilf\u00f8j element");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addElement(evt);
            }
        });

        getContentPane().add(jButton1);

        jButton2.setText("Fjern element");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fjern(evt);
            }
        });

        getContentPane().add(jButton2);

        pack();
    }

    private void fjern(java.awt.event.ActionEvent evt) {
        model.remove( list.getSelectedValue() );
    }

    private void addElement(java.awt.event.ActionEvent evt) {
        count++;
    model.add(new String("  " + count + "  "));
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new TestJList().show();
    }

    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList list;
   
    private Vector data = new Vector();
    private MyModel model;
    private int count = 0;
}


// MODELLEN
class MyModel extends AbstractListModel {
    private ArrayList data;
   
    public MyModel() {
        super();
        data = new ArrayList();
    } 
   
    public void add(Object d){
        int row = data.size();
        data.add(d); 
        fireIntervalAdded(this,row,row);
    }
   
    public void remove(Object d){
        int row = data.indexOf(d);
        if( row > -1 ){
            data.remove(row);
            fireIntervalRemoved(this,row,row);
        }
    }
     
    public Object getElementAt(int index) { 
        return data.get(index);
    }

    public int getSize() {
        return data.size(); 
    }
}
Avatar billede jnh Nybegynder
03. juni 2004 - 22:26 #2
fik selv skruet noget sammen med DefaultListModel, som er mindre sofistikeret, men det virker... Du får point for indsatsen og hvis der er overskydende tid, vil jeg implementere "din" måde at gøre det på.

Tak for hjælpen!
//Jesper
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester