JavaBeans és a data binding (feladat egy pop3 kiszolgáló lekérdezése)
A javaBean-ek gyakorlatilag java osztályok, melyek azért kapták ezt a nevet, mert önmagukban teljesen zártak és mindenféle m?veletet csak a publikus metódusaikon keresztül tudunk elvégezni rajtuk.
Ez a felfogás az alapja annak, hogy olyan programrészeket (komponenseket) tudjuk fejleszteni, amit aztán utólag könnyedén fel tudunk mi vagy mások (akár a komponens bels? szerkezetének ismerete nélkül is) is használni bárhol, ahol szükség van rá.
Feladat, hogy készítsük egy olyan osztályt ami beolvassa egy POP3 kiszolgálóra érkezett leveleket, és azt javaBean-ekben, illetve ezekb?l készült listákban tárolja. A listákat pedig jelenítsük meg dataBinding segítségével egy jtable komponensben.
Szükségünk lesz a javamail komponensre, amit a sun oldaláról lehet letölteni inegyenesen:
http://java.sun.com/products/javamail/
Készítsük el a javaBean-t ami, tárolni fogja egy levél adatait.
NetBeans-ben jobb click a projekt nevére -> new -> other menüpot. Majd a megjelen? ablakban a “javabeans objects” kategóriából a “JavaBeans component” -et kell választani.

Majd a létrehozott alap bean-t egészítsük ki a levél tulajdonságokkal.
Ha valaki sima szövegszerkeszt?t használ, akkor a köv. a kód:
import java.beans.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.mail.Address;
import javax.mail.Flags;
import javax.mail.Folder;
public class MailMessage
extends Object implements Serializable {
private PropertyChangeSupport propertySupport;
private String subject;
private Date sentDate;
private Date receivedDate;
private int messageNumber;
private String mailFrom;
private Collection<javax.mail.Address> replyTo;
private javax.mail.Folder folder;
private javax.mail.Flags flags;
private int size;
private String content;
public MailMessage() {
propertySupport = new PropertyChangeSupport(this);
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public int getMessageNumber() {
return messageNumber;
}
public void setMessageNumber(int messageNumber) {
this.messageNumber = messageNumber;
}
public Date getReceivedDate() {
return receivedDate;
}
public void setReceivedDate(Date receivedDate) {
this.receivedDate = receivedDate;
}
public Date getSentDate() {
return sentDate;
}
public void setSentDate(Date sentDate) {
this.sentDate = sentDate;
}
public Flags getFlags() {
return flags;
}
public void setFlags(Flags flags) {
this.flags = flags;
}
public Folder getFolder() {
return folder;
}
public void setFolder(Folder folder) {
this.folder = folder;
}
public String getMailFrom() {
return mailFrom;
}
public void setMailFrom(String mailFrom) {
this.mailFrom = mailFrom;
}
public Collection<Address> getReplyTo() {
return replyTo;
}
public void setReplyTo(Collection<Address> replyTo) {
this.replyTo = replyTo;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void addPropertyChangeListener(
PropertyChangeListener listener) {
propertySupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(
PropertyChangeListener listener) {
propertySupport.removePropertyChangeListener(listener);
}
}
Ezzel létrehoztunk egy MailMessage nev? osztályt, amely majd egy üzenet adatait fogja tárolni.
Figyeljük meg, hogy a JavaBean minden tulajdonságát setter illetve gettet metódusokkal állítjuk be és kérdezzük le. Ez nagyon fontos mivel ez miatt válik tulajdonképpen “bean”-é. A továbbiakban pedig a dataBinding-nál is nagy szerep jut ezeknek a metódusoknak.
A következ? feladat elkészíteni azt az osztályt, ami lekérdezi a megadott POP3 postafiók leveleit, és az el?z?leg definiált JavaBean -ekb?l listát készít.
A forrást terjedelni okok miatt nem teszem ide fel, hanem letölthet? a köv. helyr?l:
A használata pedig a következ?.
Példányosítjuk az osztályt, átadva a konstruktornak a POP3 kiszolgáló adatait:
FetchMail mailManager = new FetchMail(host,user,pass);
Majd a getMessages() metódust használva kérhetjük le a JavaBean listát. Tehát hozzunk létre egy objektumot, amibe lekérdezzük a leveleket:
FetchMail mailManager = new FetchMail(host,user,pass); java.util.List<MailMessage> messageList = ObservableCollections.observableList(mailManager.getMessages());
(Érdemes több szálon futtatni ezeket a lekérdezéseket, mivel ez akár több 10 másodpercig is eltarthat a póstafiók telítettségét?l függ?en!)
Fontos, hogy ha bindelni akarjuk a listát, akkor observable listát készítsünk a JavaBean-ekb?l, mivel ezt kezeli le hibamentesen a data binding modul. A példában ez szerepel!
Ha kész a lista azt pedig bindelhetjük pl. egy jtable -höz:
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
JTableBinding jTableBinding = SwingBindings.createJTableBinding(
AutoBinding.UpdateStrategy.READ_WRITE,
messageList, jTable1);
JTableBinding.ColumnBinding columnBinding =
jTableBinding.addColumnBinding(
ELProperty.create("${messageNumber}"));
columnBinding.setColumnName("No");
columnBinding.setColumnClass(Integer.class);
columnBinding.setEditable(false);
columnBinding = jTableBinding.addColumnBinding(
ELProperty.create("${mailFrom}"));
columnBinding.setColumnName("Feladó");
columnBinding.setColumnClass(String.class);
columnBinding.setEditable(false);
columnBinding = jTableBinding.addColumnBinding(
ELProperty.create("${subject}"));
columnBinding.setColumnName("Tárgy");
columnBinding.setColumnClass(String.class);
columnBinding.setEditable(false);
columnBinding = jTableBinding.addColumnBinding(
ELProperty.create("${sentDate}"));
columnBinding.setColumnName("Dátum");
columnBinding.setColumnClass(java.util.Date.class);
columnBinding.setEditable(false);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();
Ha kész a bindelés, akkor egy szép kis listát kapunk a táblázatunkba a postafiókban lév? levelekr?l.

Comments:
You must be logged in to post a comment.