May 2008
M T W T F S S
« Apr   Jun »
 1234
567891011
12131415161718
19202122232425
262728293031  




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.

új java bean létrehozása

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:

FetchMail.java

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.

Levél lista jtable-ben

27 May 2008 | Uncategorized | Comments

Comments:

You must be logged in to post a comment.