06 August 2008

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.....

57 °C:

Mr. SKHAI said...

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'??

om4gus said...

@ 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.

Mr. SKHAI said...

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,...

om4gus said...

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

Mr. SKHAI said...

sya tunggu y mas artikelnya,..

om4gus said...

@ Mr. SKHAI
Coba yang ini, Java-MySql: Aplikasi Database dengan Data Gambar ,
Semoga bisa membantu.

Black said...

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............

om4gus said...

@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!!!

Putude said...

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

om4gus said...

@putude
baca juga artikel java yang lain yah

hainamasaiarosh said...

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

om4gus said...

@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.

-S- said...

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. :)

om4gus said...

@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.

-S- said...

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);

}

om4gus said...

@ 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.

-S- said...

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.

om4gus said...

@ 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.

-S- said...

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();
}

om4gus said...

@ 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. :-)

-S- said...

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^

bagudung said...

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.

om4gus said...

@ 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.

Anonymous said...

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..

om4gus said...

@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

afry said...

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

om4gus said...

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

Anonymous said...

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.

om4gus said...

@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;

Anonymous said...

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.

om4gus said...

@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

Anonymous said...

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.:)

Anonymous said...

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

om4gus said...

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

Hanny said...

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.

Anonymous said...

nbkjk

Anonymous said...

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..

om4gus said...

@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.

om4gus said...

@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

Hanny said...

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.

Anonymous said...

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

Tony's @ishiteru said...

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

Supria said...

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

Mas Anto said...

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

Mas Anto said...

maksudnya ga berhasil juga.. heheuu..

Anonymous said...

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?

om4gus said...

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

dedidedidedi said...

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

om4gus said...

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

antonio vanhouten said...

makasih tutornya... sangat menbantu.....

panggabeanlinuxer said...
This comment has been removed by the author.
panggabeanlinuxer said...

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

om4gus said...

@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."

Belajar Programming Java untuk Pemula said...

coba pakai ini, tutorial untuk mendapatkan value dari frame lain. sudah dicoba dan berhasil :)

Martinus Bulu said...

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

Silvianita Mpi said...

sungguh membingungkan dengan kalimat nya

Bill Crz said...

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

Post a Comment