29 July 2008

Membuat Multiple Document Interface (MDI) Window



MDI Window? Sebuah Jendela yang bisa menamping beberapa dialog didalamnya yang berdiri sendiri. Cara pembuatannya, supaya tidak tergantung dengan jenis editor yang digunakan, kita pahami dulu langkah pembuatannya. Langkah ini juga bisa untuk memahami sedikit konsep tentang OOP. Sedangkan editornya bisa apa aja. Yang jelas, source code yang disediakan dibawah bisa dijalankan meskipun diedit dengan Notepad. Sedangkan editor lainnya, bisa dicoba sehingga mempunyai pemahaman dan cara masing-masing. Karena langkah ini cuma salah satunya yang agak sederhana.
- Buat sebuah Form Utama untuk tempat semua form lainnya, kita namakan parent window
- Tambahkan JDesktopPane untuk tempat tampilan semua child window nantinya.
- Pada parent window, tambahkan tombol atau menu untuk memanggil form child window
- Buat sebuah kelas untuk menyimpan semua prilaku object child window supaya seragam, sehingga semua child window merupakan inheritance dari class dasar ini. Kita namakan namakan nJFrame yang merupakan inheritance dari JInternalFrame. Pada kelas ini juga ada method buka untuk menampilkan dan menghilangkan child window.
- Sekarang buat child window dengan jenis JInternalFrame, yang diganti menjadi inheritance nJFrame yang kita buat.
- pada parent window, add semua child window kedalam desktopPane dengan method add pada saat inisialisasi.
- Gunakan method buka dari nJFrame pada setiap tombol di parent window yang berfungsi menampilkan child window masing-masing.





Source Code untuk Masing-masing class:



//frmMenu.java
public class frmMenu extends javax.swing.JFrame {
public frmMenu() {
initComponents();
desktop.add(c2);
desktop.add(c1);

setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
}
private void initComponents() {//GEN-BEGIN:initComponents
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
desktop = new javax.swing.JDesktopPane();


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

jButton1.setText("Child1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

jToolBar1.add(jButton1);

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

jToolBar1.add(jButton2);

getContentPane().add(jToolBar1, java.awt.BorderLayout.NORTH);

getContentPane().add(desktop, java.awt.BorderLayout.CENTER);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-400)/2, (screenSize.height-300)/2, 400, 300);
}//GEN-END:initComponents

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
nJFrame.buka(c2);
}//GEN-LAST:event_jButton2ActionPerformed

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
nJFrame.buka(c1);
}//GEN-LAST:event_jButton1ActionPerformed

/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
System.exit(0);
}//GEN-LAST:event_exitForm

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

// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JDesktopPane desktop;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JToolBar jToolBar1;
// End of variables declaration//GEN-END:variables
private frmChild1 c1 = new frmChild1();
private frmChild1 c2 = new frmChild1();
}



//nJFrame.java
public class nJFrame extends javax.swing.JInternalFrame {
public nJFrame() {
super( "" , //title
false, //resizable
true, //closable
false, //maximizable
false);//iconifiable

}
public static void buka(javax.swing.JInternalFrame frame){
if(frame.isVisible()){
frame.setVisible(false);
}else{
frame.setVisible(true);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e) {}
}

}
}


//frmChild1.java
public class frmChild1 extends nJFrame {
public frmChild1() {
initComponents();
}
private void initComponents() {//GEN-BEGIN:initComponents

setBounds(0, 0, 352, 276);
}//GEN-END:initComponents


// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables

}


//frmChild2.java
public class frmChild2 extends nJFrame {
public frmChild2() {
initComponents();
}
private void initComponents() {//GEN-BEGIN:initComponents

setTitle("Window");
setBounds(0, 0, 416, 302);
}//GEN-END:initComponents


// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables

}
N3XT...arrow

01 July 2008

MyTotalPack 4.4!

MyTotalPack 4.4,
Portable and Installer version,
Beginner and Advance version.

http://mytotalpack.blogspot.com/2008/06/mytotalpack-44.html N3XT...arrow

CURL_PHP: untuk send-request antar web server

CURL, Client URL Library
FORM HTTP POST
CURL IN ACTION


Libcurl membuat semua jenis komunikasi antar sever mungkin terjadi dengan berbagai macam cara. Bisa dengan protocol http, https, ftp, gopher, telnet, dict, dan ldap dengan dukungan HTTPS certificate, HTTP POST, HTTP PUT, FTP uploading, upload berbasis HTTP form, proxy, cookies, bahkan autentifikasi user dan password. Yang akan dibahas untuk sementara ini adalah HTTP FORM. CURL harus diaktifkan dulu melalui php.ini di bagian windows extention ( untuk windows ) dengan menghilangkan comment di extension=php_curl.dll.

Untuk mengembangkan imaginasi, situasi yang mungkin memerlukan adanya curl:

- Pengiriman data ke server web dengan berbasis FORM HTTP GET dilakukan dengan mengisi sebuah form dengan method GET yang hasilnya ditampilkan dalam url tujuan. Tapi pengiriman juga bisa dilakukan tanpa mengisi sebuah form, cukup dengan memanggil alamatnya, misalkan https://ebank.com/getstatus.php?no=1&pengirim=011&nominal=1000000, maka data bisa dikirim. Proses tersebut tentu saja bisa digantikan oleh mesin secara otomatis, baik dengan javascript location.assign maupun dengan referal php header. Sedangkan pada skrip penerima, semua parameter yang dikirim ada pada Predefined variabel $_GET atau $HTTP_GET_VARS, atau juga bisa $_REQUEST di file getstatus.php. Kesimpulannya, FORM HTTP GET bisa digunakan untuk pengiriman data antar server, dan terlalu sederhana dan bodoh untuk dibahas lebih lanjut. Tapi tetap saja memanfaatkan curl akan membuat proses ribuan kali lebih cepat dan otomatis

- Itu untuk kasus GET, sekarang bagaimana dengan FORM HTTP POST? Form post merupakan kebalikan dari get, semua variabel tidak dilewatkan melalui sebuah alamat link. POST dirancang agar data berasal dari sebuah form dengan method POST dengan skrip penerimanya ada pada bagian action, bukan lagi berasal dari sebuah link. Itulah sebabnya GET banyak digunakan untuk form yang memungkinkan untuk kembali dengan mudah, bookmark-able page, sedangkan POST hampir selalu digunakan untuk semua form untuk pengiriman data dan upload file. Sedangkan pada skrip penerima, semua parameter yang dikirim ada pada Predefined variabel $_POST atau $HTTP_POST_VARS di file getstatus.php. Pengiriman data tidak bisa dilakukan secara otomatis dengan memanggil alamat action dari form, yang tentu saja malah akan mendapat apapun karena tidak ada data yang dikirimkan, atau dengan memaksakan diri dengan memaksakan diri dengan memanggil alamat lengkap dengan parameternya seperti halnya, ini bunuh dir. Ngga ada gunanya. Kecuali untuk programmer skrip penerima yang begitu lugunya menggunakan variabel global atau $_REQUEST untuk menerima datanya. Proses penerimaan dan pengiriman data untuk otomatisasi tidak bisa dilakukan dengan skrip php biasa, harus dengan mengisi sebuah form, lengkap dengan aturan untuk menekan tombol submit untuk memulai pengiriman form. Untuk alasan inilah curl diperlukan. THAT’S WHY CURL EXISTS!

- Ingin membaca halaman web dari server lain untuk ditampilkan kembali? Pake curl

- Harus mengirim data antar server? Pake curl

- Otomatisasi, tanpa perlu mengisi form berulang-ulang untuk ribuan data, cukup mengandalkan php? Pake curl

- Ingin mendapatkan status selesainya transaksi yang dilakukan web lain? Pake curl

- Ingin memberikan akses kepada web server lain untuk mendapat data yang diperlukan dari web server kita, tanpa harus memberikan akses ke database mysql secara langsung? Cukup dengan memberikan alamat skrip dan parameter yang diperlukan beserta format hasil datanya. Ini cara paling mudah dan bukan paling aman. pake curl.

- Brute force attack, mencoba ribuan kombinasi username dan password dalam sedetik, atau melumpuhkan server lain dengan mudah? Pake CURL. Itulah alasannya curl tidak diaktifkan secara default karena kekuatanya. Itulah alasannya ada algoritma UID (Unique Identity) untuk setiap pengiriman form ke pengisi. Itulah sebabnya ada captcha! Menyebalkan, kita seperti di tes membaca dan menulis sekaligus dites mata cuma untuk daftar email!, gini2, bukan cuma lulusan TK. THAT’S WHY CAPTCHA EXSIST!

Sekarang, contoh untuk penerimaan data. Skrip dibawah ini akan mengambil tampilan dari detik.com kemudian langsung menampilkan hasilnya......


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.detik.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>


Sekarang, contoh untuk pengiriman data. Misalkan webserver penjual.com ingin mengetahui status transaksi dari seorang pelanggan melalui ebank.com. Apabila sudah dilakukan, menghasilkan nilai 1, apabila belum menghasilkan nilai 0. Sebagai contoh menggunakan dua buah skrip php berbeda server untuk berkomunikasi.


/* http://penjual.com/sender.php */
<?
function ambilStatusMutasi($no,$pengirim,$penerima,$nominal){
$url='http://ebank.com/receive.php'; //?no=1&pengirim=011&nominal=1000000';

$postfields = array ('no' => $no,
'pengirim' => $pengirim,
'penerima' => $penerima,
'nominal' => $nominal
);

if (!$curld = curl_init()) {
echo "CURL GAGAL.\n";
exit;
}

curl_setopt($curld, CURLOPT_POST, true);
curl_setopt($curld, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($curld, CURLOPT_URL, $url);
curl_setopt($curld, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curld);
//echo "Received data: <hr>$output<hr>\n";
curl_close($curld);
//echo $output;
return $output;

}

//pemakaian fungsi
if(ambilStatusMutasi(“11”,”012”,”001”,”100000”)==1){
echo”Mutasi Berhasil”;
}else{
echo”Mutasi GAGAL atau belum bayar”;
}
?>




/* http://ebank.com/receive.php */
<?
$no_mutasi = $_REQUEST[no];
$pengirim = $_REQUEST[pengirim];
$penerima = $_REQUEST[penerima];
$nominal = $_REQUEST[nominal];
$result = mysql_query("select id_mutasi, id_nasabah_debit,id_nasabah_kredit,nominal from mutasi_tb where id_mutasi='$no_mutasi' and id_nasabah_debit='$pengirim' AND id_nasabah_kredit = '$penerima' AND nominal >= $nominal ");

if(mysql_num_rows($result)>0){
echo 1;
}else{
echo "0 $no_mutasi $pengirim $penerima $nominal";
}

?>


Bisa ditambahkan verifikasi $_REMOTE untuk memastikan request data berasal dari server yang diberikan akses.

Entah, kenapa php_manual yang selalu jadi andalan tidak bisa memberikan jawaban seperti ini untuk situasi dan saat tertentu.

Hari ini? Bahagia. Karena tahu segalanya......

Kadang, harus jadi orang idiot untuk mendapatkan sebuah rahasia besar
N3XT...arrow