Mi sono fatto un programmino che carica una colonna da un foglio excel con gli indirizzi email dentro una JComboBox.

Selezionando le voci della JCB mi si riempie dinamicamente una JTextField con ogni indirizzo separato da virgola.

Poi posso inviare la mail agli indirizzi scelti.

Su come leggere un foglio excel potete vedere questo articolo; per inviare la mail quest'altro.

Manca in pratica solo la comodità del riempimento.

Quello che voglio ottenere è questo comportamento: all'inizio la JCB ha il valore * e poi tutti gli indirizzi estrpolati da excel; quando clicco sua una voce che non è * viene aggiunto un indirizzo email seguito dalla virgola come separatore.

La cosa è molto comoda perchè nn dovete stare a pensare continuamente a scrivere i vari indirizzi; vi basterà salvarli una vola su excel.

Per far partire il tutto dovete creare un evento itemStateChanged.

Io l'ho creato con gli automatismi di NetBeans, quindi il codice non è dei più puliti.

Per il progetto della libreria mi è capitato di dover ridefinire i metodi equals e hashCode.

Il primo, come si può capire dal nome stesso, serve per controllare l'uguaglianza tra due oggetti.

Questo metodo è legato all'altro, così che se viene ridefinito uno deve essere ridefinito anche l'altro.

Questo perchè l'uguaglianza si basa appunto su un codice hash, che viene trovato dal metodo hashCode.

Detto ciò vi posto tutta la classe:

public class Author {

private int id;
private String name;

public Author(String name) {
this.name = name;
}

public Author(int id, String name) {
this.id = id;
this.name = name;
}

public int getId() {
return id;
}

@Override
public String toString() {
return name;
}

@Override
public boolean equals(Object obj) {
if (!(obj instanceof Author)) {
return false;
}
Author a = (Author) obj;
return this.name.equals(a.toString());
}

@Override
public int hashCode() {
int hash = 3;
hash = 59 * hash + (this.name != null ? this.name.hashCode() : 0);
return hash;
}
}

E' una classe che rappresenta la tabella autori nel mio db (la stessa cosa l'ho fatta sugli editori).

A noi interessano gli ultimi due metodi.

Qui vi mostrerò come riempire una JComboBox tenendo separando il valore che si vede a video dal valore attuale che il componente; un pò come una <select> HTML.

In pratica la tabella Autori che ho nel db ha solo due campi, che sono rappresentati dalla classe wrapper qua sotto:

public class Author {

    public int id;
    public String name;

    public Author(String name) {
        this.name = name;
    }

    public Author(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return name;
    }
}

Niente di complicato, una semplice classe con un costruttore che accetta due argomenti che rappresentano l'id e il nome degli autori.

A questo punto occupiamoci del db.