Langsung ke konten utama

My Third Java Program: "Program Menghitung IP Mahasiswa"

Masih berkutat di dunia Java. Kali ini penulis mencoba bereksperimen dengan JTable.
Setelah 2-3 hari pusing ngutak-atik JTable (maklum masih newbie ^_^), nyari-nyari cara buat meng-inputkan data ke dalam tabel itu, akhirnya dapet juga petuah dari orang yang udah mahir Java di forum DIC (dreamincode.net).

Here's a sneak peek at the program :)











Berikut step by step membuat program tersebut:
1. Buatlah project baru di NetBeans.
2. Buat JFrame Form baru dan buatlah desain seperti di bawah ini.










3. Pada button "Input" tambahkan handling code berikut (dobel klik di button Input):

//Menambahkan baris baru dengan inputan dari field
        DefaultTableModel model= (DefaultTableModel)tabelNilai.getModel();
        model.addRow(new Object[]{mataKuliahField.getText(),sksField.getText(),nilaiHurufField.getText()});

        //Merubah nilai huruf menjadi nilai angka
        int nilaiAngka;
        if (nilaiHurufField.getText().equals("A")){
            nilaiAngka= 4;
        }
        else if (nilaiHurufField.getText().equals("B")){
            nilaiAngka= 3;
        }
        else if (nilaiHurufField.getText().equals("C")){
            nilaiAngka= 2;
        }
        else if (nilaiHurufField.getText().equals("D")){
            nilaiAngka= 1;
        }
        else nilaiAngka=0;

        //Menghitung jumlah nilai dan nilai SKS lalu dikalkulasikan menjadi nilai IP
        jumlahNilai= (nilaiAngka * Integer.parseInt(sksField.getText())) + jumlahNilai;
        jumlahSKS= (Integer.parseInt(sksField.getText())) + jumlahSKS;
        ip= jumlahNilai/jumlahSKS;

        //Menset ipField dengan nilai dari ip
        ipField.setText(String.valueOf(ip));

        mataKuliahField.setText("");
        sksField.setText("");
        nilaiHurufField.setText("");
    }

Untuk field mataKuliahField dan field-field lainnya sesuaikan dengan nama variabel yang anda berikan pada field anda. Selain itu jangan lupa untuk menambahkan variabel jumlahNilai, jumlahSKS, dan ip pada class tersebut dengan inisialisasi nilai nol dan beritipe double.

4. Setelah selesai jangan lupa di save lalu build project tersebut. Happy coding :)

Jika ingin mendownload project ini, silakan download disini.

Berikut source code lengkapnya:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * gpaCounterUI.java
 *
 * Created on 08 Feb 11, 9:06:35
 */

package counterPackage;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Gentra
 */
public class gpaCounterUI extends javax.swing.JFrame {

    private double jumlahNilai=0;
    private double jumlahSKS=0;
    private double ip=0;
    /** Creates new form gpaCounterUI */
    public gpaCounterUI() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    //                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tabelNilai = new javax.swing.JTable();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        mataKuliahField = new javax.swing.JTextField();
        sksField = new javax.swing.JTextField();
        nilaiHurufField = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        ipField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        tabelNilai.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Mata Kuliah", "SKS", "Nilai"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tabelNilai);
        tabelNilai.getColumnModel().getColumn(0).setResizable(false);
        tabelNilai.getColumnModel().getColumn(1).setResizable(false);
        tabelNilai.getColumnModel().getColumn(2).setResizable(false);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Input Nilai"));

        jLabel1.setText("Mata Kuliah");

        jLabel2.setText("SKS");

        jLabel3.setText("Nilai");

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

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(mataKuliahField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                            .addComponent(sksField, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE)
                            .addComponent(nilaiHurufField, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE))
                        .addGap(25, 25, 25))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addContainerGap())))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(23, 23, 23)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(mataKuliahField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(sksField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(nilaiHurufField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 41, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addContainerGap())
        );

        jLabel4.setText("IP Sementara");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel4)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ipField, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(ipField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(16, Short.MAX_VALUE))
        );

        pack();
    }//                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        //Menambahkan baris baru dengan inputan dari field
        DefaultTableModel model= (DefaultTableModel)tabelNilai.getModel();
        model.addRow(new Object[]{mataKuliahField.getText(),sksField.getText(),nilaiHurufField.getText()});

        //Merubah nilai huruf menjadi nilai angka
        int nilaiAngka;
        if (nilaiHurufField.getText().equals("A")){
            nilaiAngka= 4;
        }
        else if (nilaiHurufField.getText().equals("B")){
            nilaiAngka= 3;
        }
        else if (nilaiHurufField.getText().equals("C")){
            nilaiAngka= 2;
        }
        else if (nilaiHurufField.getText().equals("D")){
            nilaiAngka= 1;
        }
        else nilaiAngka=0;

        //Menghitung jumlah nilai dan nilai SKS lalu dikalkulasikan menjadi nilai IP
        jumlahNilai= (nilaiAngka * Integer.parseInt(sksField.getText())) + jumlahNilai;
        jumlahSKS= (Integer.parseInt(sksField.getText())) + jumlahSKS;
        ip= jumlahNilai/jumlahSKS;

        //Menset ipField dengan nilai dari ip
        ipField.setText(String.valueOf(ip));

        mataKuliahField.setText("");
        sksField.setText("");
        nilaiHurufField.setText("");
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new gpaCounterUI().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextField ipField;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField mataKuliahField;
    private javax.swing.JTextField nilaiHurufField;
    private javax.swing.JTextField sksField;
    private javax.swing.JTable tabelNilai;
    // End of variables declaration                   

}

Pos populer dari blog ini

Kumpulan Script Pascal

Pada kesempatan ini penulis ingin menuliskan beberapa script Pascal yang penulis buat sendiri. Namun penulis mohon maaf bila terdapat kekurangan pada script-script dibawah ini mengingat penulis sendiri masih belajar dalam pemrograman Pascal. Script-script dibawah ini ditujukan untuk compiler Turbo Pascal For Windows 1.5 dan telah penulis coba sendiri keberhasilannya. Namun bila anda memiliki saran untuk penulisan script-script dibawah ini atau memiliki kritik terhadap script-script ini, anda dapat mengirimkan penulis e-mail, maupun comment terhadap posting ini. Bagi anda yang belum memiliki compiler Turbo Pascal For Windows 1.5, anda dapat mendownloadnya di http://community.borland.com/article/0,1410,20803,00.html . Baiklah, selamat mencoba.
(Seluruh script yang terdapat pada artikel ini bebas untuk digunakan, disalin, dimodifikasi, maupun disebarluaskan selama tidak disalahgunakan untuk kejahatan.)
Program DiskriminanPersamaanKuadrat
Masih ingatkah anda terhadap pelajaran Diskriminan Pe…

"Program Login" Menggunakan Pascal

Setelah lama ga ketemu Pascal. Penulis iseng-iseng nyobain untuk ngoprek-ngoprek lagi program Pascal. Dan sesuai dugaan, banyak materi dan kode-kode yang penulis udah lupa dari pascal :p
Kali ini penulis nyoba bikin program (tepatnya sebagian kecil program :p) untuk sistem login. Ya, cuma program iseng-iseng aja sih, ga memiliki nilai guna pada dasarnya, tapi lumayan buat yang masih baru-baru mau mencoba pemrograman Pascal :)
Prinsip kerja program ini simple (seperti sistem login pada umumnya, namun dengan keamanan yang sangat rendah, maklum amatir ^^v). Pertama, pengguna menginputkan data username dan passwordnya, lalu program akan memverifikasikannya, jika benar maka pengguna akan dibawa ke layar berikutnya. Namun jika salah, maka pengguna memiliki kesempatan 2 kali untuk mengulang menginputkan datanya.