Skip to main content

Java: Pengiriman Parameter antar Frame

Sebenarnya konsep ini berlaku bukan hanya pada frame, tapi bisa dilakukan antar object dari class yang sifatnya umum, karena Java yang sifatnya sudah full OOP. Tapi, karena lebih sering diterapkan dalam pemrograman GUI desktop, khususnya dengan Netbeans, maka dicontohkan dengan class javax.swing.JFrame.
Setiap bentuk code java harus dibentuk dalam bentuk class, biar sebagaimanapun sederhananya. Tidak seperti pemrograman lainnya yang menggunakan konsep OOP sebagai tambahan dan pengembangan dari yang sudah ada sebelumnya. Itulah sebabnya kita mengenal class di C++, Pascal, PHP, tapi masih diperbolehkan untuk tetap menggunakan konsep primitif. Sedangkan pada kasus java dan .NET, OOP merupakan inti utamanya yang harus selalu diikuti dan diterapkan. Awalnya akan sangat membingungkan, tapi sangat mudah untuk langkah pengembangan selanjutnya. Sudah lihat JavaDoc? itu adalah dokumen pemrograman yang paling aneh didunia, pada pandangan pertama. Coba bandingkan dengan MSDN-nya .NET, PHP Manual, atau Delphi Help, JavaDoc cuma serangkaian kamus aneh hampir tanpa contoh penggunaannya. Tapi itulah asiknya OOP, dengan serangkaian aturan yang serupa, yang bisa diterapkan untuk class apa saja, kita bisa membuat apapun yang bisa dibuat dengan java cuma mengandalkan kamus aneh ini.
Class sendiri merupakan serangkaian aturan dan definisi dari program yang akan dibuat. Class harus dibuat menjadi object untuk bisa memanfaatkan program yang ada didalamnya. Keharusan ini membuat perintah 'new', sebuah keyword untuk membuat object dari class, sangat sering ditemui. Pada saat pembuatan object, selain membuat object dengan nama yang ditentukan atau bisa juga cuma sebuah object anonim, juga melaksanakan perintah yang ada dalam constructor. Constructor adalah fungsi khusus dengan nama sama dengan nama class yang dibuat, dengan tipe akses public tanpa penentuan tipe data. Apabila tidak ada constructor, tidak ada proses yang dijalankan bersamaan dengan pembuatan object, dan itu diperbolehkan. Sedangkan pembuatan constructor lebih dari satu untuk tujuan yang berbeda juga diperbolehkan. Dengan sarat, memakai jumlah dan atau tipe data parameter yang berbeda.

public class namaClass{
public namaClass(){
}
public namaClass(String params){
}
public namaClass(int params){
}
}


Sedangkan untuk pengiriman data antar frame, kita menggunakan parameter yang kita sebutkan di constructor ini. Dengan beberapa contoh penggunaannya. Yang jelas, kita harus membuat constructor dengan parameter yang disesuaikan. Constructor hanya dijalankan pada saat pertama kali pembuatan object. Tapi contoh dibawah ini, selain contoh pertama, isi data parameter akan berubah, jadi tidak bersifat statis pada saat runtime.

1. frameOne memanggil sambil mengirimkan parameter string ke frameTwo.

Yang harus dilakukan adalah menyediakan constructor String di frameTwo, selanjutnya menampilkan data yang diterima. Dalam hal ini dalam bentuk JLabel.

public frameTwo(String parameter){
initComponents();
jLabel1.setText(parameter);
}

Sedangkan pada frameOne sebagai pembanggil, membuat object dari class dengan constructor frameTwo yang sudah dibuat, mengisi parameter dari constructor sesuai dengan string yang dikirimkan, kemudian menampilkan object frameTwo. Gunakan jButton1 untuk tempat perintah tersebut.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
frameTwo obj2=new frameTwo("DATA");
obj2.setVisible(true);
}

2. frameOne memanggil sambil mengirimkan parameter berupa object JtextField ke frameThree. Isinya diambil oleh frameThree.

Ini artinya, Secara runtime, JtextField bisa dimanipulasi bukan hanya dari frameOne sebagai pemilik, tapi juga frameThree. Isi dari JTextField bisa langsung diambil apabila ada perubahan saat runtime melalui tombol JButton. Tapi, frameOne sebagai pemilik JTextField harus diinisialisasi terlebih dahulu, apabila belum, akan terjadi NullPointerException.

Kita harus membuat constructor di frameThree dengan parameter JTextField, Membuat variabel global untuk tempat parameter yang diterima, membuat jLabel1 dan tombol jButton1 untuk mengupdate isinya.

public frameThree(JTextField parameter){
initComponents();
this.parameter = parameter;
jLabel1.setText(this.parameter.getText());
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jLabel1.setText(parameter.getText());
}
JTextField parameter;

Pada frameOne, kita memanggil constructor dari frameThree dengan parameternya dan menampilkan frame tersebut. Buat jTextField1 untuk dilewatkan sebagai parameter dan jButton2 untuk pemanggilan.

Sekarang coba lakukan perubahan pada JtextField di frameOne, maka Isi dari JLabel di frameThree akan berubah setelah tombol dibawahnya diklik, sesuai isi yang terbaru dari JTextField di frameOne.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
frameThree obj3=new frameThree(jTextField1);
obj3.setVisible(true);
}

3. merupakan kebalikannya dari yang kedua. frameOne memanggil sambil mengirimkan parameter berupa object JLabel ke frameThree. Isi dari JLabel nantinya bisa ditentukan dari frameFour.

Buat constructor pada frameFour dengan parameter JLabel. Buat jTextField1 dan jButton1 untuk mempengaruhi isi dari label di frameOne.

public frameFour(JLabel parameter) {
initComponents();
this.parameter=parameter;
this.parameter.setText(jTextField1.getText());
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
parameter.setText(jTextField1.getText());
}
public JLabel parameter;


Di frameOne, panggil frameFour dengan melewatkan parameter jLabel1.

Sekarang, panggil frameFour dengan tombol di frameOne, setelah frameFour tampil, lakukan perubahan isi jTextField1, tekan tombolnya, maka isi jLabel1 di frameOne akan berubah.

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
frameFour obj4=new frameFour(jLabel1);
obj4.setVisible(true);
}

Selain itu, buat DefaultCloseOperation dari semua frame selain frame utama menjadi dispose.

Selesai. Sekarang, selali lagi, penerapannya bisa dalam banyak hal. Misalkan dengan mengirimkan parameter berupa JButton sehingga event yang dilakukan bisa dijalankan di frame yang lain. Atau banyak hal lainnya yang melibatkan banyak class dan object secara simultan.

Source Code:

/////////////////////////////////////////////////////////////////

/* frameOne.java */

public class frameOne extends javax.swing.JFrame {

public frameOne() {

initComponents();

}

private void initComponents() {


jButton1 = new javax.swing.JButton();

jButton2 = new javax.swing.JButton();

jTextField1 = new javax.swing.JTextField();

jButton3 = new javax.swing.JButton();

jLabel1 = new javax.swing.JLabel();


setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("frameOne");


jButton1.setText("panggil FrameTwo dengan mengirim parameter String \"DATA\"");

jButton1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});


jButton2.setText("panggil frameThree dengan mengirim parameter JTextField1");

jButton2.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton2ActionPerformed(evt);

}

});


jTextField1.setText("jTextField1");


jButton3.setText("panggil frameFour");

jButton3.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton3ActionPerformed(evt);

}

});


jLabel1.setBackground(new java.awt.Color(204, 255, 255));

jLabel1.setText("jLabel1");

jLabel1.setOpaque(true);


javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(122, 122, 122)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addGap(27, 27, 27)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(jButton1)

.addComponent(jButton2)))

.addGroup(layout.createSequentialGroup()

.addGap(120, 120, 120)

.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addGap(94, 94, 94)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 212, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap(36, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(52, 52, 52)

.addComponent(jButton1)

.addGap(31, 31, 31)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(jButton2)

.addGap(38, 38, 38)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addComponent(jButton3)

.addContainerGap(31, Short.MAX_VALUE))

);


pack();

}// </editor-fold>


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

frameTwo obj2=new frameTwo("DATA");

obj2.setVisible(true);

}


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

frameThree obj3=new frameThree(jTextField1);

obj3.setVisible(true);

}


private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {

frameFour obj4=new frameFour(jLabel1);

obj4.setVisible(true);

}



public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new frameOne().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JButton jButton2;

private javax.swing.JButton jButton3;

private javax.swing.JLabel jLabel1;

private javax.swing.JTextField jTextField1;

// End of variables declaration



}


/////////////////////////////////////////////////////////////////////////////////////

/* frameTwo.java */


public class frameTwo extends javax.swing.JFrame {

public frameTwo() {

initComponents();

}

public frameTwo(String parameter){

initComponents();

jLabel1.setText(parameter);

}

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {


jLabel1 = new javax.swing.JLabel();


setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

setTitle("frameTwo");


jLabel1.setBackground(new java.awt.Color(204, 255, 255));

jLabel1.setText("jLabel1");

jLabel1.setOpaque(true);


javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(72, 72, 72)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(72, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(37, 37, 37)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(65, Short.MAX_VALUE))

);


pack();

}// </editor-fold>



public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new frameTwo().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JLabel jLabel1;

// End of variables declaration



}


/////////////////////////////////////////////////////////////////////////////////////

/* frameThree.java */


import javax.swing.*;

public class frameThree extends javax.swing.JFrame {

public frameThree() {

initComponents();

}

public frameThree(JTextField parameter){

initComponents();

this.parameter = parameter;

jLabel1.setText(this.parameter.getText());

}

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {


jLabel1 = new javax.swing.JLabel();

jButton1 = new javax.swing.JButton();


setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

setTitle("frameThree");


jLabel1.setBackground(new java.awt.Color(204, 255, 255));

jLabel1.setText("jLabel1");

jLabel1.setOpaque(true);


jButton1.setText("update jLabel1");

jButton1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});


javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(99, 99, 99)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addGap(75, 75, 75)

.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 186, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap(48, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(33, 33, 33)

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(18, 18, 18)

.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(38, Short.MAX_VALUE))

);


pack();

}// </editor-fold>


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

jLabel1.setText(parameter.getText());

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new frameThree().setVisible(true);

}

});

}

JTextField parameter;

// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JLabel jLabel1;

// End of variables declaration

}


/////////////////////////////////////////////////////////////////////////////////////

/* frameFour.java */


import javax.swing.*;

public class frameFour extends javax.swing.JFrame {

public frameFour() {

initComponents();

}

public frameFour(JLabel parameter) {

initComponents();

this.parameter=parameter;

}

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {


jButton1 = new javax.swing.JButton();

jTextField1 = new javax.swing.JTextField();


setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

setTitle("frameFour");


jButton1.setText("ubah JLabel di frameOne");

jButton1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});


jTextField1.setText("jTextField1");


javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(75, 75, 75)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 151, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addGap(25, 25, 25)

.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 231, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap(62, Short.MAX_VALUE))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()

.addContainerGap(43, Short.MAX_VALUE)

.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(32, 32, 32)

.addComponent(jButton1)

.addGap(42, 42, 42))

);


pack();

}// </editor-fold>


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

parameter.setText(jTextField1.getText());

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new frameFour().setVisible(true);

}

});

}

public JLabel parameter;

// Variables declaration - do not modify

private javax.swing.JButton jButton1;

private javax.swing.JTextField jTextField1;

// End of variables declaration

}

/////////////////////////////////////////////////////////////////////////////////////

Berantakan ya? masih nyoba2 pake scribefire soalnya.....

Comments

  1. mas mo nanya,.. ada tutorial buat nyimpan, nampilin foto, serta ngedit dan ngapus foto dari database pake prog java ga' klo dbnya pake mysql,.. maklum baru blajar java,... o y mas, satu lg,.. ada tutor tentang swing ekstrim ga'??

    ReplyDelete
  2. @ Mr. SKHAI

    Gambar memang bisa disimpan di database dengan data type binary, tapi ini cukup riskan.

    Cara yang lebih mudah adalah dengan menyimpan gambar dalam bentuk file, sedangkan nama filenya disamakan dengan ID dari record di database.

    Saya kurang tahu yang dimaksud dengan "Swing Ekstrim". :-). Tapi untuk e-book java yang menarik contohnya contohnya adalah "Swing Hacks - Tips & Tools For Killer GUIs (2005)". Disana banyak hal yang menarik seperti membuat window yang transparan.

    ReplyDelete
  3. sblmnya mksih y mas utk jwabannya, tp sya msh bngung tntang menyimpan gambar dlm bntuk file dan nma filenya dsamakan dngan id di db trsebut. bsa djelaskan lebih rinci ga' mas?. klo memungkinkan, bsa ga' penjelasannya langsung sama listing programnya,. maklum newbie di program java. makasih y mas,...

    ReplyDelete
  4. @ Mr. SKHAI
    Iya, kalo sempat saya buatkan artikelnya disini. Kalo sempat lho yah...

    ReplyDelete
  5. sya tunggu y mas artikelnya,..

    ReplyDelete
  6. cak q punya tugas nih,n q ga'bisa\
    tugasnya : membuat acak nama qt,trus nma qt itu bs jdi brapa kta dlm dftar kta bhsa indonesia.
    tlong bntu dong............

    ReplyDelete
  7. @Black

    Kata adalah kumpulan beberapa huruf yang mempunyai arti.

    Kumpulan huruf yang dibentuk secara acak tetapi tidak mempunyai arti tidak bisa dinamakan sebagai kata. Sebuah kumpulan huruf yang dibentuk secara acak dari sebuah nama yang dipisahkan spasi dengan kumpulan huruf yang lain, tetapi tidak mempunyai arti apa-apa, bukanlah sebuah kata.

    Kalau tidak salah, itulah pengertian dari kata waktu SD, ngomong-ngomong, Nilai Bahasa Indonesia anda berapa yah? ;)

    Jadi, kalaupun harus dibuat program, bayangkanlah sebuah program pintar yang bisa membentuk semua kemungkinan yang ada dari hasil pengacakan sebuah nama, kemudian, membandingkan dengan daftar kata dari KBBI/ Kamus Besar Bahasa Indonesia, Setelah itu menjumlahkan, ada berapa kata yang benar.

    Kalau sebuah nama terdiri dari 10 huruf yang berbeda, maka daftar kata acak yang harus dicek adalah
    = 2+2!+3!+4!+5!+6!+7!+8!+9!+10!

    Setelah itu dibandingkan dengan jumlah kata dalam kbbi sebanyak 90 ribu kata, Jadi jumlah prosesnya adalah
    = (2+2!+3!+4!+5!+6!+7!+8!+9!+10!) x 90000

    Serius, saya ngga sanggup ngerjain!!!

    ReplyDelete
  8. Akhirnya setelah cari-cari akhirnya ketemu artikel ini. Maklum saya baru memulai Java. Terima kasih atas sharing-nya. Cheers.

    ReplyDelete
  9. @putude
    baca juga artikel java yang lain yah

    ReplyDelete
  10. om masih gk ngerti yang :
    2. frameOne memanggil sambil mengirimkan parameter berupa object JtextField ke frameThree.
    kok logika saya belum dapet ya?? mohon bimbingan nya.. thx

    ReplyDelete
  11. @Haina
    Berarti memanggil frame3 sambil mengirimkan objek. Dengan cara ini, semua hal tentang objek tersebut yg berada di frame pemanggil bisa diketahui dari frame pemanggil yang dipanggil. Misalkan text, lebar, warna, dan letaknya.

    ReplyDelete
  12. Mas, saya ga tau ini nyambung ato ga (tp nyambung jg kok mas.. hehe.. biar dijawab).
    Yang mas bahas kn tentang passing parameter antar frame. Kalau saya kan ingin passing nilai antar frame. Tp yg jd permasalahan bukan passing nilainya mas. Misalkan ada 2 form ya mas, form A dan form B. Saya mau menampilkan form B ketika button yg ada di form A di-klik. Lalu saya menggunakan code seperti ini:

    private void btnCariActionPerformed(java.awt.event.ActionEvent evt) {

    b = new FormB();
    this.add(b);
    b.setVisible(true);

    }

    Tp kenapa form B munculnya jd tumpang tindih gitu ya mas dengan form A? Jd, yg muncul seperti 2 form jd satu. Bukan 2 form terpisah. Klo saya hilangkan "this.add(b)", form B tidak mau muncul.
    Kira2 caranya gimana ya mas? Makasih u/ jawabannya. :)

    ReplyDelete
  13. @s
    Jawaban saya sebelumnya seharusnya sudah mencukupi, kecuali ada bagian deklarasi yang kurang. Add sebuah frame ke dalam frame yang lain mengakibatkan efek bertumpuk seperti itu.

    ReplyDelete
  14. Saya sudah mengikuti coding yg mas tulis (minus parameter), tp seperti yg saya bilang form B jd ga muncul ketika saya tidak menambahkan this.add(b). Tp kalau saya tambahkan jdnya ya bertumpuk gitu. Ada cara yang terlewatkan oleh saya ga sih mas?

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {

    frameFour obj4=new frameFour();

    obj4.setVisible(true);

    }

    ReplyDelete
  15. @ s
    saya tentu tidak bisa tau bagian apa saja yang kurang. Tapi kalo semua kode diatas dibuat, harusnya bisa. Kalau tanpa parameter dan tanpa add, coba klik tombolnya. Coba lihat di taskbar, seharusnya ada frameFour disitu. Kalau tidak ada, coba lihat pesan error di editor.

    ReplyDelete
  16. Tidak ada pesan error mas. Tapi ya ga bisa kebuka aja. Oia,klo liat dari contoh mas itu JFrame kn ya? Klo aku pake JInternalFrame. Form A dan Form B itu adalah JInternalFrame. Jd, ada bedanya ga ya mas? Ada JFrame untuk MDI Formnya. Sedangkan form A dan B adalah MDI Child-nya.

    ReplyDelete
  17. @ s
    :-). Jinternalframe tidak bisa berdiri sendiri. Itulah Sebabnya tidah bisa langsung tampil. Dia harus dimasukkan ke dalam komponen penampung misalkan jdesktoppane. Coba cari artikel tentang mdi di blog ini, sudah ada kok.

    ReplyDelete
  18. Mas, maap ya nanya lg. Kalau munculin JInternalFrame dari menu yg ada di MDI,saya uda bisa mas. Saya waktu itu juga liat coding-nya mas yg MDI Window itu. :) Tampung semua JInternalFrame ke dalam desktoppane dan desktoppane itu ditaro di MDI parent-nya kn mas? Tapi klo JInternalFrame1 mau menampilkan JInternalFrame2, apakah di actionPerformed button JInternalFrame1, ada code u/ tampung JInternalFrame2 di desktopPane? Saya coba seperti ini masi ga bisa mas:

    (ini adalah button di form A)

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    FormB b = new FormB();
    new MenuUtama().desktop.add(b); //tampung di desktoppane MDI
    //parent, bener ga mas? :")
    sup.show();
    }

    ReplyDelete
  19. @ s
    Jdesktoppane yang ada di form menuutama tidak bisa diubah2 oleh komponen yg ada di form a, karena tidak berhubungan.
    Cara yang benar adalah, dari menuutama memanggil frame a sambil mengirimkan parameter berupa jdesktoppane. Coba lihat pengiriman parameter berupa objek.
    Selanjutnya tinggal memasukkan frame b kedalam objek ini. :-)

    ReplyDelete
  20. uda bisaaaa!! Haha..makasih ya mas! Maap jg ud ganggu mulu dengan nanya2. Akhirnya bisa jg. Ud 1minggu cuma buat ini doanx, ga ketemu2. -.-"
    Thank you banget ya mas buat pencerahannya! ^o^

    ReplyDelete
    Replies
    1. Mass, tolong saya
      bisa kirim contoh koding nya gak??
      Saya masih belum paham tentang yang di bahas oleh mas agus ini
      Mohon bantuan nya mas
      Ini email saya
      Bill14crz@gmail.com

      Delete
  21. Pak, bisa tolong diberi contoh yang mudah saja. Misalnya dua buah frame, frame satu berisi halaman input nama dan alamat dengan button. Lalu frame kedua, menampilkan nama dan alamat yang di input dari frame satu. Terima kasih dan selamat beraktivitas.

    ReplyDelete
  22. @ bagudung
    Contoh diatas dibuat per bagian, bahkan yang paling sederhana cuma berisi satu label. Jadi kalau cuma butuh sebuah bagian tinggal ambil bagian itu saja. Mau lebih sederhana yang bagaimana?
    Selain itu juga mencakup semua hal dalam topik pengiriman parameter, dari yang paling sederhana sampai yang lebih rumit seperti pengiriman object. Jadi saya anggap sudah mencukupi kebutuhan siapa saja yang mau belajar.

    ReplyDelete
  23. Maaf, pak. Saya mahasiswa TI di Bengkulu. Saya sdh cb prog diatas, tp knp untuk code :

    ...
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    frameTwo obj2=new frameTwo("DATA");
    obj2.setVisible(true);
    }
    ...

    dibawah : obj2.setVisible(true)
    saya tambahkan : this. dispose();

    Frame pertama masih muncul. Bagaimana caranya, agar ketika frame 2 muncul, frame pertama tertutup, tapi nilai dari frame satu tetap dpt di ambil oleh frame 2. Mohon bantuannya pak, terima kasih pak..

    ReplyDelete
  24. @Anonymous
    Jangan gunakan dispose, tapi setVisible untuk menyembunyikan form lama tapi tetap berjalan di belakang.

    this.setVisible(false);

    Untuk perbedaannya lihat:
    http://om4gus.blogspot.com/2008/07/membuat-multiple-document-interface-mdi.html?showComment=1251083590188#c4115407155720159320

    ReplyDelete
  25. mas.. ada tutorial tentang JAI (java advance imaging) ga? pengen bikin aplikasi deteksi gambar nih

    ReplyDelete
  26. @afry
    banyak. http://lmgtfy.com/?q=java+advance+imaging

    ReplyDelete
  27. permisi pak,
    saya mw tanya klo slah 1 jframe dignti sama jdialog trus data yg dikirim dlm bntuk jButton bgaimna ya?
    misalnya saat panggil jdialog;

    frameFive obj4 = new frameFive(this, true);
    obj4.setVisible(true);

    pada isian "(this, true);" saya tdk bsa mmasukkan jbutton.

    ReplyDelete
  28. @Anonim
    Buat constructor dari class yg merupakan extends dari JDialog terlebih dahulu, setelah itu baru bisa dipanggil. Sederhananya seperti ini:

    public class frameFive extends javax.swing.JDialog {
    public frameFive(Window owner, Dialog.ModalityType modalityType, JButton jb){
    this.jb = jb;
    }

    public JButton jb;

    ReplyDelete
  29. tRImakasih pak, bagian itu sdah jdi.
    tpi mncul error di bgian main-nya
    bagian error codingx:

    frameFive dialog = new frameFive(new javax.swing.JFrame(), true);

    *cannot find symbol
    symbol: constructor frameFive(javax.swing.JFrame, boolean)
    sekali lagi tlg ya pak.

    ReplyDelete
  30. @Anonim
    Karena itu, belum dibuat konstructor.

    coba tambahkan constructor function
    public frameFive(Window owner, Dialog.ModalityType modalityType, JButton jb){
    this.jb = jb;
    }

    di dalam public class frameFive extends javax.swing.JDialog

    ReplyDelete
  31. sya sdah cba buat pak,
    bgni ya?

    public frameFive(java.awt.Frame parent, boolean modal, JButton jb) {
    super(parent, modal);
    this.jb=jb;
    initComponents();
    this.setLocationRelativeTo(null);
    }

    public JButton jb;

    maaf pak y klo slah.:)

    ReplyDelete
  32. Ok, sdah pak.
    Terima kasih..
    Tutorial java-nya bsa smakin diperbanyak utk kami yg bru blajar.

    ReplyDelete
  33. @Anonim
    Tinggal tanya saja kalo ada masalah. Nanti saya jawab dalam bentuk artikel java di om4g.us

    ReplyDelete
  34. om, sya ad prtnyaan lgi.
    Dlm jdialog sya truh 1 tabel yg data2nya akan di edit di jframe1. Utk pngiriman parameter brupa jbutton sdah ok. skrg msalahx pada mngirim parameter jtextfield. jka datanya bnyak akn lmyan mrepotkan.
    bgaimana mmbuatnya lebih sderhana?
    sblumnya trimakasih.

    ReplyDelete
  35. om...
    saya bikin program penjualan...
    di program itu ada form login dengan byk petugas, nah gmna caranya supaya ketika login itu di form transaksi pada field nama kasir sesuai dengan user ketika login???
    makasih..

    ReplyDelete
  36. @Hanny
    Kalo datanya banyak, akan lebih mudah kalau tidak menggunakan JFame yg sama.
    Daripada mengirimkan Jtextfield yg banyak, lebih baik ambil tabelnya yg jadi parameter.

    ReplyDelete
  37. @Anonymous
    1. Kirimkan parameter Nama Login dari Form Login ke Form Transaksi.
    2. Di Form Transaksi, Masukkan variabel parameter dari Form Login ke sebuah variabel global
    3. Data di variabel global ini bisa diambil untuk ditampilkan

    ReplyDelete
  38. sore om,
    sya mw tnya agak lain dr topik ini.
    sya ingin mnampilkan foto ke ireport. fotonya disimpan di folder, bkn dtabase.
    apakah pkai pramater jga sprti biasa ya?
    mkasih om.

    ReplyDelete
  39. Faisal bertanya ....
    OM Agus bagaimana prog java-nya
    setiap item barang di scan dg barcode
    item datanya langsung ke printer dotmatrix atau printer struck
    thanks ... om

    ReplyDelete
  40. gak da method yg difungsikan,,
    jdi gak bs jalan di Netbeans.. ~_~

    ReplyDelete
  41. -Pia-
    mas saya mau nanya, ada gk tutorial pembuatan aplikasi deteksi kamera dan cara nyimpan hasil fotonya?

    ReplyDelete
  42. Om.. ada link download source codenya ga??...
    sy masih bingung,, kok yg dari frameOne ke frameThree berhasil....

    ReplyDelete
  43. maksudnya ga berhasil juga.. heheuu..

    ReplyDelete
  44. permisi mas, saya mau buat tabel, kalau di klik row tabel tersebut akan muncul frame yg isinya data yg lebih lengkap dari row tabel tersebut.
    parameternya bisa dijadikan query sql ga ya?

    ReplyDelete
  45. @Anonymous
    Caranya dengan mengirimkan parameter id dari data tersebut. Setelah itu di frame yg baru bisa akses database untuk menampilkan detail dari data

    ReplyDelete
  46. saya ingin mengirim nilai dari "Object objParam = tabModel.getValueAt(tabelCF.getSelectedRow(),0);
    String tess = objParam.toString();"
    gimana ya?

    ReplyDelete
  47. @dedidedidedi
    Maksudnya mengirimkan parameter string tess?
    Gunakan cara pertama untuk mengirimkan parameter string

    ReplyDelete
  48. makasih tutornya... sangat menbantu.....

    ReplyDelete
  49. This comment has been removed by the author.

    ReplyDelete
  50. salam javaners :D
    sangat membantu nagat bang
    saya mau nanya bang cotohnya form1 mangil from2 tanpa "dispose form1" setelah form2 di input data kli k ok form1 dispose dan form2 otomatis masuk datanya...klu yang saya ini harus manggil lagi form1 baru keliatan hasilnya...adakah solusi mengatasi hal tersebut ??....mohon maaf bang jika pertanyaanya membingungkan :D ..thnsk bang

    ReplyDelete
  51. @panggabeanlinuxer

    Apakah seperti diatas?

    "Di frameOne, panggil frameFour dengan melewatkan parameter jLabel1.

    Sekarang, panggil frameFour dengan tombol di frameOne, setelah frameFour tampil, lakukan perubahan isi jTextField1, tekan tombolnya, maka isi jLabel1 di frameOne akan berubah."

    ReplyDelete
  52. mat malam saya Martin,
    maaf, boleh tanya tentang program, cara mengirim data ke form lain misalkan ketik hallo kirim ke form dua misalkan. mksh

    ReplyDelete
  53. sungguh membingungkan dengan kalimat nya

    ReplyDelete
  54. Kak, aku pengen bikin program yang implementasiin 3 form untuk pengiriman data. Gimana caranya kak? Tolong bantuin ya kak, soal nya ini tugas aku

    ReplyDelete

Post a Comment

Popular posts from this blog

Java-MySql: Aplikasi Database dengan Data Gambar (Updated)

Untuk update metode simpan gambar lihat di appGambar 2.0 Bagaimana caranya menyimpan data yang membutuhkan penyimpanan data gambar? Misalkan data pegawai yang membutuhkan penyimpanan gambar dari setiap pegawai. Alternatifnya ada dua, dengan kelebihan dan kekurangan masing-masing. Cara yang pertama adalah dengan membuat field dengan tipe data binary, kemudian menyimpan gambar yang dibutuhkan dalam field di database tersebut. Cara ini membutuhkan manajemen program yang lebih rumit, tapi data gambar akan terjamin, karena tersimpan didalam database yang terintegrasi dengan data lainnya. Kekurangan lainnya adalah ukuran database yang akan membesar dan lambat. Bayangkan saja, sebuah field membutuhkan gambar dengan format jpeg, 200kB. Apabila ada 200 juta record, maka ukuran field yang diperuntukan khusus untuk gambar dengan perhitungan kasar adalah 0.2 MB x 200M = 40 x 10^12 = 40 TB. Belum ditambah dengan ukuran data dari field lainnya, kalau misalkan untuk menyimpan data penduduk Indonesia.

PHP: Kalkulator

Pada intinya, kalkulator berbasis web ini menggunakan tiga dasar, yaitu CSS, PHP, dan HTML. CSS (Cascading Style Sheets) agar mudah mengatur tampilan, PHP (PHP Hypertext Prepocessor) untuk operasi perhitungan, dan HTML (Hypertext Markup Language) untuk pembuatan form kalkulator. Kesemuanya dalam bentuk dasar dengan logika perhitungan sederhana untuk melakukan perhitungan. Sedangkan array diatas digunakan untuk debugger dan memahami jalannya algoritma. <html> <head> </head> <body> <style type="text/css"> .Hasil { color: #fcc; background-color: blue; font-size: 4em; border: 1px solid #660; padding: 4px; } .Operator { color: #fcc; background-color: #900; font-size: 1.5em; border: 1px solid #660; width: 100px; padding: 4px; } .Angka { color: white; background-color: #660; font-size: 1.5em; border: 1px solid #660; padding: 4px; width: 100px; } </style> <?php function Hitung($b1,$b2,$o){ switch($o){ case '+': return $b1

Pembuatan PDF di PHP dengan FPDF dan HTML2FPDF

Untuk membuat pdf dengan menggunakan php, kita bisa menggunakan fpdf yang berbasis class. Sedangkan html2fpdf digunakan untuk mengubah html menjadi pdf. Dengan hanya menggunakan fpdf, kita harus menentukan semua hal yang mengatur tampilannya berbasis code sesuai dengan aturan dan fungsi yang disediakan class tersebut. Dengan menggunakan html2fpdf, kita cuma perlu membuat sebuah file html dan tampilannya langsung diubah menjadi sebuah file pdf, tentu dengan beberapa keterbatasan dan perubahan tampilan. Saat ini, fpdf terbaru pada versi 1.6 sedangkan html2fpdf versi 3. Instalasi: + Ekstrak file fpdf dan html2fpdf. Sebenarnya html2fpdf merupakan inheritance dari class fpdf, tapi class di fpdf yang disdertakan di paket html2fpdf telah dimodifikasi dari aslinya sesuai dengan kebutuhan konversi tersebut. Class original dari fpdf akan kita pakai untuk pembuatan pdf secara manual, bukan dari html. + Ganti nama file fpdf.php misalkan menjadi fpdf16.php. Karena untuk bebrapa versi instalasi php