Tuesday, June 5, 2007

GraPHiC uSEr InTErFaCE ( GUI )

Di Java, GUI diimplement dari class javax.swing dan packages java.awt

Untuk membuat frame window, kita bisa menggunakan class JFrame.
JFrame defaultJFrame;
defaultJFrame = new JFrame();
defaultJFrame.setVisible(true);

Content pane adalah tempat untuk meletakkan tombol, label, scroll bars, dan lainnya. Dan kita dapat mengaksesnya dengan memanggil method getContentPane.

Cara kita untuk mengubah warna background sebuah content pane :
Container contentPane = getContentPane();
contentPane.setBackground(Color.BLUE);
----> untuk mengubah warna background menjadi warna biru

Beberapa class dari swing GUI adalah :
- JLabel yang berguna untuk menampilkan label seperti image atau text.
Ketika membuat label image, kita harus menambahkan ImageIcon.
JLabel textLabel = new JLabel("Please enter your name");
contentPane.add(textLabel);
-----> untuk menampilkan text

Jlabel imgLabel = new JLabel (new ImageIcon ("cat.gif"));
contentPane.add(imgLabel);
------> untuk menampilkan image

- JTextField yang berguna bagi user untuk memasukkan sebuah kalimat.
getText berfungsi untuk mendapatkan text yang telah dimasukkan oleh user.
JTextField input = new JTextField();
contentPane.add(input);

- JTextArea yang berguna bagi user untuk memasukkan banyak kalimat. Dan ini juga berfungsi untuk menampilan banyak uneditable text.
setText berfungsi untuk memasukkan isi kalimat
append berfungsi untuk menambahkan kalimat dari kalimat sebelumnya
JTextArea textArea = new JTextArea();
......
textArea.setText("Hello\n");
textArea.append(" the lost ");
textArea.append("world");

-----> Hello
the lost world

Di JTextArea, kita juga bisa menambahkan scrool bars dengan menambahkan object JScrollPane.
JTextArea textArea = new JTextArea();
.......
JScrollPane scrollText = new JscrollPane( textArea );
......
contentPane.add(scrollText);

Ada 2 cara untuk memasukkan GUI ke dalam content pane sebuah frame :
a. Menggunakan layout manager :
- FlowLayout
Dengan menggunakan layout ini, maka komponen GUI dapat diletakkan dari kiri ke kanan. Ketika komponen tidak cukup untuk diletakkan dalam satu baris, maka akan diletakkan di baris selanjutnya. Sebagai defaultnya, komponen diletakkan di pusat frame. Ketika ukuran frame nya diubah, maka penempatan komponennya disesuaikan dengan ukuran frame tersebut.

- BorderLayout
Layout ini dibagi dalam 5 bagian : pusat, utara, selatan, timur, dan barat.
Bagian utara dan selatan dapat membesar dan mengecil hanya untuk tinggi dari yang dibatasi.
Bagian timur dan barat dapat membesar dan mengecil hanya untuk lebar dari wilayah yang dibatasi.
Bagian pusat dapat membesar dan mengecil untuk lebar dan tinggi wilayah yang dibatasinya.
Tidak semua wilayah dibatasi dengan border ini.

- GridLayout
Layout ini menempatkan komponen frame dengan ukuran yang sama yang ditempatkan dari atas ke bawah dan dari kanan ke kiri. Dan banyaknya baris dan kolom disesuaikan dengan ukuran frame.

b. Menggunakan absolute positioning
- null layout manager

Komponen GUI yang lainnya :
- JCheckBox
- JRadioButton
- JComboBox
- JList
- JSlider

Di package javax.swing juga berisi class menu, seperti :
- JMenuBar adalah sebuah bar di mana semua menu ditempatkan. Ada satu menu bar di tiap frame.
- JMenu ( seperti File atau Edit ) adalah sebuah kelompok dari pilihan menu. Dan JMenuBar memungkinkan untuk memiliki lebih dari satu JMenu.
- JMenuItem ( seperti Copy, Cut, atau Paste ) adalah pilihan menu dari JMenu. Dan hanya JMenuItem yang menghasilkan events.

inPuT aND ouTPuT

Untuk mengoperasikan sebuah file, kita harus membuat object File dari java.io
Example : File inFile = new File ("sample.dat");
berfungsi untuk membuka file sample.dat

File inFile = new File("C:/SamplePrograms/test.dat");
berfungsi untuk membuka file test.dat di directory C:\SamplePrograms

Beberapa method dari File :
- if ( inFile.exists () ) { ----> untuk melihat jika inFile yang dimaksud benar atau tidak
- if ( inFile.isFile () ) { -----> untuk melihat jika inFile yang dimaksud merupakan file atau bukan, jika bukan, berarti itu adalah directory.

File directory = new File ("C:/JavaPrograms/Ch12");
String filename[] = directory.list();
for (int i = 0; i <>
System.out.println(filename[i]);
}
Ini untuk mengeluarkan semua nama file yang ada di directory C:\JavaPrograms\Ch12

Object javax.swing.JFileChooser berguna untuk memilih sebuah file yang diinginkan oleh user.
JFileChooser chooser = new JFileChooser();
chooser.showOpenDialog(null);

Beberapa info dari JFileChooser :
- File selectedFile = chooser.getSelectedFile();
- File currentDirectory = chooser.getCurrentDirectory();

File filter kemungkinan terbatas digunakan dalam JFileChooser hanya untuk file atau directory yang membutuhkan filtering. Di dalam Java, kita bisa menggunakan class javax.swing.filechooser.FileFilter yang juga menyediakan beberapa method, seperti :
- public boolean accept(File file);
- public String getDescription();

Untuk membaca atau menulis data dari sebuah file, kita harus membuat salah satu object stream yang kita lampirkan ke dalam file.
Stream adalah rangkaian dari data items yang biasanya terdiri dari 8 bit.
Java memiliki 2 tipe stream : input stream ( berisi source dari data yang akan ditampilkan ) dan output stream ( berisi tujuan dari data itu ).

FileOutputStream ( membantu kita untuk mengeluarkan rangkaian bytes ) dan FileInputStream ( membantu kita untuk membaca dalam array of bytes ) adalah 2 object stream yang berguna untuk mengakses sebuah file.
File outFile = new File ("sample1.data");
FileOutputStream outStream = new FileOutputStream ( outFile );

File inFile = new File ("sample1.data");
FileInputStream inStream = new FileInputStream ( inFile );

FileOutputStream dan DataOutputStream digunakan untuk mengeluarkan primitive data values. Sedangkan FileInputStream dan DataInputStream digunakan untuk memasukkan primitive data values.

File outFile = new File ("sample1.data");
FileOutputStream outFileStream = new FileOutputStream ( outFile );
DataOutputStream outDataStream = new DataOutputStream ( outFileStream );

outDataStream berguna untuk menuliskan primitive data
outFileStream berguna untuk mengubah primitive data menjadi rangkaian bytes
outFile berguna untuk menuliskan bytenya

Setelah kita menuliskan dan mengatur outDataStream, kita bisa menuliskan nilai primitive data ke dalam stream di main nya.
outDataStream.writeInt(987654321);
outDataStream.writeLong(111111111);
outDataStream.close();

Object dari DataInputStream adalah :
File inFile = new File ("sample1.data");
FileInputStream inFileStream = new FileInputStream ( inFile );
DataInputStream inDataStream = new DataInputStream ( inFileStream );

inFile berguna untuk membaca bytes
inFileStream berguna untuk mengubah rangkaian bytes menjadi primitive data
inDataStream berguna untuk membaca primitive data

Setelah kita mengatur DataInputStream nya, kita membuat data yang sudah dimasukkan dapat diperlihatkan
System.out.println(inDataStream.readInt());
System.out.println(inDataStream.readLong());
inDataStream.close();

Dan yang perlu diingat adalah primitive data yang dioperasikan dalam output dan input harus sama dan benar.

Kita juga bisa menyimpan primitive data sebagai data biner dalam sebuah file, kita dapat mengubah dan menyimpannya sebagai string yang memungkinkan kita untuk melihat isi file dengan banyak text file editor.

Untuk mengeluarkan data sebagai string suatu file, kita menggunakan object PrintWriter.
File outFile = new File ("sample3.data");
FileOutputStream outFileStream = new FileOutputStream ( outFile );
PrintWriter outStream = new PrintWriter ( outFileStream );

Sedangkan untuk memasukkan data dari sebuah text file, kita menggunakan kelas FileReader dan BufferedReader. Dan kita bisa menggunakan class Scanner untuk memasukkan text file nya.
File inFile = new File ("sample3.data");
FileInputStream inFileStream = new FileInputStream ( inFile );
BufferedReader bufReader = new BufferedReader ( fileReader );

Kita dapat menggunakan ObjectOutputStream dan ObjectInputStream untuk menyimpan dan mengisi object dari sebuah file.
Dan untuk menyimpan object dari sebuah class yang diberikan, class nya harus dideclare dengan implements Serializable.
class Person implements Serializable {
......
}

Untuk menyimpan sebuah object :
File outFile = new File ("objects.data");
FileOutputStream outFileStream = new FileOutputStream ( outFile );
ObjectOutputStream outObjectStream = new ObjectOutputStream ( outFileStream );
Person person = new Person ("Mr. Espresso", 20, 'M');
outObjectStream.writeObject ( person );

Sedangkan untuk membaca object :
File inFile = new File ("objects.data");
FileInputStream inFileStream = new FileInputStream ( inFile );
ObjectInputStream inObjectStream = new ObjectInputStream ( inFileStream );
Person person = ( Person ) inObjectStream.readObject(); ----> harus ditulis cast untuk mendapatkan tipe object yang benar.

Menyimpan dan membaca sebuah object dapat dilakukan dalam array.
Person[] people = new Person[ N ];
.........
outObjectStream.writeObject ( people );
................
Person[] people = ( Person[] ) inObjectStream.readObject();