Ngobrol di Sini

Pemrograman Socket di Swing


Tutorial pemrograman java socket dengan protokol TCP/IP sudah banyak di internet, salah satunya ada di Tutorial Sun namun saya lihat masih jarang programmer java yang membahas java socket client server dengan swing.
Ok dech kita mulai yuk membuat aplikasi sederhana komunikasi client dan server berbasis GUI dengan java swing.

Persiapan untuk mengikuti pembahasan kali ini sebagai berikut :

  • Download JDK 6 di sini
  • Download source code program server serta client di sini dan di sini

Dalam source code program saya sertakan file jar untuk executable, agar Anda dapat mencoba langsung aplikasi sederhana ini atau Anda dapat meng-compile dan menjalankan file GuiClient.java untuk aplikasi client serta file GuiServer.java untuk aplikasi servernya.

Buka file GuiServer.java di editor atau IDE favorit Anda. Anda akan melihat ada 1 class utama dengan nama GuiServer dan 2 inner class di dalamnya yaitu class TableBeans dan class InfoServer.
Saya akan membahas satu per satu point-point penting yang perlu di bahas di aplikasi server ini, seperti :

  • Constructor GuiServer di class GuiServer
  • Method updateTable di class GuiServer
  • Method tampilkanWaktu di Inner class TableBeans
  • Method connectToServer di Inner class InfoServer
  • Constructor GuiServer di class GuiServer :
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        public GuiServer() {
    super(new BorderLayout());

    myTable = new JTable();
    myScrollTable = new JScrollPane();
    setBorder(BorderFactory.createCompoundBorder(
    BorderFactory.createEmptyBorder(4, 4, 4, 4),
    BorderFactory.createBevelBorder(BevelBorder.RAISED)));
    myTable.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
    myTable.setModel(new DefaultTableModel(
    new Object [][] {

    },
    new String [] {
    "Date / Time", "Message"
    }
    ));
    myScrollTable.setViewportView(myTable);

    add(myScrollTable, BorderLayout.CENTER);

    objServer = new InfoServer(this);
    new Thread() {
    public void run() {
    objServer.connectToServer();
    }
    }.start();
    }

    terlihat di constructor class GuiServer terdapat pembuatan komponen JTable dengan 2 field yaitu Date/Time untuk menampung tanggal maupun waktu dan Message untuk menampung pesan dari action yang sedang dikerjakan oleh server. Di akhir constructor kita dapat lihat instance dari class InfoServer diciptakan(akan dibahas nanti) di ikuti dengan pemanggilan method connectToServer oleh object dari InfoServer yang dibungkus oleh sebuah thread, ini diperlukan agar kita keluar dari thread EDT.

  • Method updateTable di class GuiServer :
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        public void updateTable(){
    Object[][] data = new Object[this.myList.size()][3];
    int x = 0;
    //System.out.println(this.list.size());
    for(TableBeans tb:this.myList){
    data[x][0] = tb.getWaktu();
    data[x][1] = tb.getMessage();
    x++;
    }

    myTable.setModel(new javax.swing.table.DefaultTableModel(data,title) {
    boolean[] canEdit = new boolean [] {
    false, false
    };

    public boolean isCellEditable(int rowIndex, int columnIndex) {
    return canEdit [columnIndex];
    }
    });
    }

    Seperti namanya method updateTable di class GuiServer ini berfungsi untuk meng-update value row di JTable. Semua yang perlu ditampilkan apabila terjadi action akan memanggil method updateTable ini.

  • Method tampilkanWaktu di Inner class TableBeans :
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
            public String  tampilkanWaktu(){
    String tgl_bln_thnSekarang;
    GregorianCalendar gc = new GregorianCalendar();
    int tanggalIni = gc.get(Calendar.DATE);
    int bulanIni = gc.get(Calendar.MONTH)+1;
    int tahunIni = gc.get(Calendar.YEAR);
    int jamIni = gc.get(Calendar.HOUR_OF_DAY);
    int menitIni = gc.get(Calendar.MINUTE);
    int detikIni = gc.get(Calendar.SECOND);

    String tglSkrg = Integer.toString(tanggalIni);
    String blnSkrg = Integer.toString(bulanIni);
    String thnSkrg = Integer.toString(tahunIni);
    String jamSkrg = Integer.toString(jamIni);
    String menitSkrg = Integer.toString(menitIni);
    String detikSkrg = Integer.toString(detikIni);

    if (tanggalIni < 10) {
    tglSkrg = "0"+tglSkrg;
    }
    if (bulanIni < 10) {
    blnSkrg = "0"+blnSkrg;
    }
    if (jamIni < 10) {
    jamSkrg = "0"+jamSkrg;
    }
    if (menitIni < 10) {
    menitSkrg = "0"+menitSkrg;
    }
    if (detikIni < 10) {
    detikSkrg = "0"+detikSkrg;
    }

    return tgl_bln_thnSekarang = " " + tglSkrg + "-" + blnSkrg + "-" + thnSkrg +
    " / " + jamSkrg + ":" + menitSkrg + ":" + detikSkrg;
    }
    }

    yeah, i knew, ada Joda Time yang akan di masukkan ke java 7 dengan manajemen tanggal dan waktu yang lebih baik dari pada class GregorianCalendar, tapi sebelum java 7 keluar, kita pake ini dulu :) untuk mendapatkan tanggal dan waktu saat ini.

  • Method connectToServer di Inner class InfoServer :
  • Method ini saya rasa bila melihat kode programnya maka Anda akan langsung paham, karena contoh penciptaan instance ServerSocket, Socket dan yang lainnya untuk koneksi client server sudah ada penjelasannya di internet, yang perlu digaris bawahi di sini adalah saat kita menampung waktu dan pesan hingga saat meng update value dari JTable.
    Inisialisaasi object class TableBeans ditampung ke dalam ArrayList yang reference ke class TableBeans itu sendiri, bila ini sudah masuk maka kita hanya tinggal memanggil method updateTable dari class GuiServer.

    Untuk source code di program client kurang lebih sama penjelasan dengan program server hanya saja di JTable program client ditambahkan 1 field yaitu Order untuk menampung perintah yang diinputkan oleh client.

    Mudah-mudahan dengan contoh membuat aplikasi sederhana dengan java socket dan swing ini dapat memotivasi newbie untuk back to fundamental dan tidak terhipnotis dan illfil dengan cepatnya perkembangan teknologi di java, kenali dan praktekan terlebih dahulu satu persatu dasar-dasar pemrograman java, maka saya yakin Anda tidak akan bingung lagi saat memasuki dunia enterprise bersama java.

    Tidak ada komentar:

    Alnect computer Blog Contest