Monday, January 31, 2011

Menambahkan Fungsi Edit dalam Sage

Satu fungsi yang belum ditambahkan adalah fungsi edit terhadap quote-quote yang sudah kita masukkan.

Bagaimana caranya/

Mari kita buat bersama:

1. Fungsi Edit di-panggil dari Search Quote dengan melakukan double-click pada hasil pencarian.



Dari gambar di atas, jika kita lakukan double-click, maka akan dibuka menu AddQuoteTopComponent yang kita nantinya gunakan untuk editing quote.

2. Untuk mengaktifkan double-click dilakukan dengan right-click pada salah satu window hasil, kemudian dipilih Events -> Mouse -> MouseClicked



3. Tambahkan code ini pada event tersebut:

if (evt.getClickCount() == 2) {
if (((posisiList * 8) + 0) < besarList) {
Quote qth = (Quote) listHasil.get((posisiList * 8) + 0);
TopComponent win = WindowManager.getDefault().findTopComponent("AddQuoteTopComponent");
if (win == null) {
instance1 = AddQuoteTopComponent.findInstance();
}
if (win instanceof AddQuoteTopComponent) {
instance1 = (AddQuoteTopComponent) win;
}
instance1.loadQuote(qth);
instance1.open();
instance1.requestActive();
}
}

Ini akan memanggil fungsi AddQuoteTopComponent untuk melakukan fungsi Editing.

4. Perhatikan bahwa kita memanggil fungsi loadQuote dari AddQuoteTopComponent,
untuk itu perlu ditambahkan fungsi tersebut di sana:

public void loadQuote(Quote qt) {
Quote qtl = qt;
//Simpan Old Quote
oldQuote = qtl.getQuote();

// Kosongkan Isian
Quote.setText("");
Author.setText("");

//Isi Quote
Quote.setText(qtl.getQuote());
Author.setText(qtl.getAuthor());
}

5. Selanjutnya kita akan merubah fungsi Save, sehingga editing pertama kali harus menghapus terlebih dahulu yang lama, supaya tidak terjadi duplikasi.

private void SaveActionPerformed(java.awt.event.ActionEvent evt) {
//Delete Old
if ((Quote.getText().isEmpty())) {
return;
}

Db4o.configure().reflectWith(new JdkReflector(Thread.currentThread().getContextClassLoader()));
ObjectContainer db = Db4o.openFile("Sage.ODB");
//delete dulu
final String cariQuote = (String) Quote.getText();
ObjectSet hasil = db.query(new Predicate() {

public boolean match(Quote qt) {
if (qt.getQuote().equals(cariQuote)) {
return true;
} else {
return false;
}
}
});
if (hasil.hasNext()) {
Quote qtd = (Quote) hasil.next();
db.delete(qtd);
}
db.close();

// Save
Db4o.configure().reflectWith(new JdkReflector(Thread.currentThread().getContextClassLoader()));
db = Db4o.openFile("Sage.ODB");
try {
Quote quote = new Quote(Quote.getText(), Author.getText());
db.set(quote);
} finally {
db.close();
}
Quote.setText("");
Author.setText("");
JOptionPane.showMessageDialog(null, "Quote has been saved.",
"Quote Saved", JOptionPane.WARNING_MESSAGE);
}

Welldone, sekarang kita sudah memiliki fungsi editing di Program Sage yang kita bangun.

Salam Java,
Ong Budi Setiawan