*
* @author INOE
*/
//deklarasi GUI component
import java.awt.*; //mengimport semua package awt yang tersedia dari library
import java.awt.event.*;//mengimport semua package event pada package awt dari library
import javax.swing.*; //mengimport semua package swing yang tersedia dari library
class kalkulator3 extends JFrame implements ActionListener {//kelas kalkulator mawarisi kelas JFrame untuk diimplementasikan ke interface
//extends=mewariskan sifat-sifat dari kelas JFrame ke kelas kalkulator3
//implements=menginputkan interface
JTextField layar = new JTextField();//membuat kelas objek baru dari object class JTextField bervariabel layar dengan parameter ""
JPanel panelb = new JPanel();//membuat kelas objek baru dari object class JPanel bervariabel panelb dengan parameter ""
JButton btn1 = new JButton("1"); //membuat kelas objek baru dari object class JButton bervariabel btn1 dengan parameter "1"
JButton btn2 = new JButton("2"); //membuat kelas objek baru dari object class JButton bervariabel btn2 dengan parameter "2"
JButton btn3 = new JButton("3"); //membuat kelas objek baru dari object class JButton bervariabel btn3 dengan parameter "3"
JButton btn4 = new JButton("4"); //membuat kelas objek baru dari object class JButton bervariabel btn4 dengan parameter "4"
JButton btn5 = new JButton("5"); //membuat kelas objek baru dari object class JButton bervariabel btn5 dengan parameter "5"
JButton btn6 = new JButton("6"); //membuat kelas objek baru dari object class JButton bervariabel btn6 dengan parameter "6"
JButton btn7 = new JButton("7"); //membuat kelas objek baru dari object class JButton bervariabel btn7 dengan parameter "7"
JButton btn8 = new JButton("8"); //membuat kelas objek baru dari object class JButton bervariabel btn8 dengan parameter "8"
JButton btn9 = new JButton("9"); //membuat kelas objek baru dari object class JButton bervariabel btn9 dengan parameter "9"
JButton btn0 = new JButton("0"); //membuat kelas objek baru dari object class JButton bervariabel btn0 dengan parameter "0"
JButton btnTitik = new JButton("."); //membuat kelas objek baru dari object class JButton bervariabel btnTitik dengan parameter "."
JButton btnplusMinus = new JButton("+/-"); //membuat kelas objek baru dari object class JButton bervariabel btnplusMinus dengan parameter "+/-"
JButton btnkali = new JButton("*"); //membuat kelas objek baru dari object class JButton bervariabel btnkali dengan parameter "*"
JButton btnkurang = new JButton("-"); //membuat kelas objek baru dari object class JButton bervariabel btnkurang dengan parameter "-"
JButton btntambah = new JButton("+"); //membuat kelas objek baru dari object class JButton bervariabel btntambah dengan parameter "+"
JButton btnbagi = new JButton("/"); //membuat kelas objek baru dari object class JButton bervariabel btnbagi dengan parameter "/"
JButton btnpersen = new JButton("%"); //membuat kelas objek baru dari object class JButton bervariabel btnpersen dengan parameter "%"
JButton btnsamaDengan = new JButton("="); //membuat kelas objek baru dari object class JButton bervariabel btnsamaDengan dengan parameter "="
JButton btnc = new JButton("C"); //membuat kelas objek baru dari object class JButton bervariabel btnc dengan parameter "C"
String bukan_angka = "";// deklarasi variabel fungsi bukan_angka bertipe string
double bil_1 = 0; // deklarasi variabel fungsi bil_1 bertipe double dengan nilai awal 0
boolean angka_baru = false; // deklarasi variabel fungsi angka_baru bertipe boolean dengan nilai awal=T
public static void main(String[] args) {//method main
kalkulator3 frame = new kalkulator3();//mengubah sebuah variabel(frame)menjdi objek pada kelas kalkulator3
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//menghidupkan fungsi tobol exit pada kelas objek frame
frame.setSize(300, 245);// menentukan besarnya ukuran interface
frame.setVisible(true);//kelas objek frame dapat terlihat ketika di-run
frame.setResizable(false);//kelas objek frame tidak dapat dirubah ukurannya
}
public kalkulator3() { //method class konstruktor kalkulator3
this.getContentPane().setLayout(null);//pada kelas ini pengatran layout adalah null
this.setTitle("KALKULATOR LOMBOK");//caption dari kelas objek (frame0 yang telah dibuat
panelb.setBackground(Color.gray);//mengatur warna pada objek panelb
panelb.setBounds(new Rectangle(0, 0, 343, 225));//menentukan posisi awal dari objek panelb dan besarnya objek tersebut
panelb.setLayout(null);//setting layout dibuat null
panelb.add(btn0, null);//menambahkan kelas objek btn0 dengan pengaturan null
panelb.add(btn1, null);//menambahkan kelas objek btn1 dengan pengaturan null
panelb.add(btn2, null);//menambahkan kelas objek btn2 dengan pengaturan null
panelb.add(btn3, null);//menambahkan kelas objek btn3 dengan pengaturan null
panelb.add(btn4, null);//menambahkan kelas objek btn4 dengan pengaturan null
panelb.add(btn5, null);//menambahkan kelas objek btn5 dengan pengaturan null
panelb.add(btn6, null);//menambahkan kelas objek btn6 dengan pengaturan null
panelb.add(btn7, null);//menambahkan kelas objek btn7 dengan pengaturan null
panelb.add(btn8, null);//menambahkan kelas objek btn8 dengan pengaturan null
panelb.add(btn9, null);//menambahkan kelas objek btn9 dengan pengaturan null
panelb.add(btnplusMinus, null);//menambahkan kelas objek btnplusminus dengan pengaturan null
panelb.add(btnkali, null);//menambahkan kelas objek btnkali dengan pengaturan null
panelb.add(btnkurang, null);//menambahkan kelas objek btnkurang dengan pengaturan null
panelb.add(btnsamaDengan, null);//menambahkan kelas objek btnsamadengan dengan pengaturan null
panelb.add(btntambah, null);//menambahkan kelas objek btntambah dengan pengaturan null
panelb.add(btnbagi, null);//menambahkan kelas objek btnbagi dengan pengaturan null
panelb.add(btnpersen, null);//menambahkan kelas objek btnpersen dengan pengaturan null
panelb.add(btnc, null);//menambahkan kelas objek btnc dengan pengaturan null
panelb.add(btnTitik, null);//menambahkan kelas objek btntitik dengan pengaturan null
panelb.add(layar, null);//menambahkan kelas objek layar dengan pengaturan null
this.getContentPane().add(panelb, null);//menambahkan kelas objek panelb dengan pengaturan null pada kelas ini
layar.setBackground(Color.white);//pengaturan warna untuk kelas objek layar
layar.setBorder(null);//pengaturan pemakaian border
layar.setEditable(false);//pengaturan fungsi pengubahan
layar.setText("0");//input text pada objek kelas layar
layar.setHorizontalAlignment(SwingConstants.RIGHT);//pengaturan alligment
layar.setBounds(new Rectangle(7, 10, 278, 27));//pengaturan posisi awal objek kelas layar
btn0.setBounds(new Rectangle(6, 164, 53, 35));//pengaturan posisi awal dan besar objet class btn0 berbentuk rectangle
btnplusMinus.setBounds(new Rectangle(63, 164, 53, 35));//pengaturan posisi awal dan besar objet class btnplusMinus berbentuk rectangle
btnTitik.setBounds(new Rectangle(120, 164, 53, 35));//pengaturan posisi awal dan besar objet class btnTitik berbentuk rectangle
btntambah.setBounds(new Rectangle(176, 164, 53, 36));//pengaturan posisi awal dan besar objet class btntambah berbentuk rectangle
btnsamaDengan.setBounds(new Rectangle(232, 164, 53, 36));//pengaturan posisi awal dan besar objet class btnsamaDengan berbentuk rectangle
btn1.setBounds(new Rectangle(6, 125, 53, 35));//pengaturan posisi awal dan besar objet class btn1 berbentuk rectangle
btn2.setBounds(new Rectangle(63, 125, 53, 35));//pengaturan posisi awal dan besar objet class btn2 berbentuk rectangle
btn3.setBounds(new Rectangle(120, 125, 53, 36));//pengaturan posisi awal dan besar objet class btn3 berbentuk rectangle
btnkurang.setBounds(new Rectangle(176, 125, 53, 36));//pengaturan posisi awal dan besar objet class btnkurang berbentuk rectangle
btnbagi.setBounds(new Rectangle(232, 125, 53, 36));//pengaturan posisi awal dan besar objet class btnbagi berbentuk rectangle
btn4.setBounds(new Rectangle(6, 85, 53, 36));//pengaturan posisi awal dan besar objet class btn4 berbentuk rectangle
btn5.setBounds(new Rectangle(63, 85, 53, 36));//pengaturan posisi awal dan besar objet class btn5 berbentuk rectangle
btn6.setBounds(new Rectangle(120, 85, 53, 36));//pengaturan posisi awal dan besar objet class btn6 berbentuk rectangle
btnkali.setBounds(new Rectangle(176, 85, 53, 36));//pengaturan posisi awal dan besar objet class btnkali berbentuk rectangle
btnpersen.setBounds(new Rectangle(232, 85, 53, 36));//pengaturan posisi awal dan besar objet class btnpersen berbentuk rectangle
btn7.setBounds(new Rectangle(6, 45, 53, 36));//pengaturan posisi awal dan besar objet class btn7 berbentuk rectangle
btn8.setBounds(new Rectangle(63, 45, 53, 36));//pengaturan posisi awal dan besar objet class btn8 berbentuk rectangle
btn9.setBounds(new Rectangle(120, 45, 53, 36));//pengaturan posisi awal dan besar objet class btn9 berbentuk rectangle
btnc.setBounds(new Rectangle(176, 45, 110, 36));//pengaturan posisi awal dan besar objet class btnc berbentuk rectangle
btn0.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn0
btn1.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn1
btn2.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn2
btn3.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn3
btn4.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn4
btn5.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn5
btn6.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn6
btn7.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn7
btn8.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn8
btn9.addActionListener(this);//untuk memberikan event ke tiap kelas objek btn9
btnTitik.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnTitik
btnplusMinus.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnplusMinus
btnc.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnc
btnkali.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnkali
btnkurang.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnkurang
btnpersen.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnpersen
btnbagi.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnbagi
btnsamaDengan.addActionListener(this);//untuk memberikan event ke tiap kelas objek btnsamaDengan
btntambah.addActionListener(this);//untuk memberikan event ke tiap kelas objek btntambah
}
//deklarasi kelas event
public void actionPerformed(ActionEvent e) {
String a = e.getActionCommand();//nilai event dimasukkan ke a
if ( (a == "=") || (a == "-") || (a == "+") || (a == "*") || (a == "/")) {//membandingankan apakah nilai a=parameter atau tidak
operasi(a);//jika sama lakukan perintah operasi
}
else if (a == ".") {//jika tidak membandingankan apakah nilai a=parameter(.)atau tidak
koma(a);//jika sama lakukan perintah koma
}
else if (a == "%" || a == "+/-") {//jika tidak membandingankan apakah nilai a=parameter atau tidak
persen_negatif(a);//jika sama lakukan perintah fungsi persen_negatif
}
else if (a == "C" ) {//jika tidak membandingankan apakah nilai a=parameter(C)atau tidak
hapus(a);//jika sama lakukan fungsi hapus
}
else {//Jika tidak
angka(a); //lakukan fungsi angka
}
}
public void angka(String a) {//method class jika input berupa angka
if (angka_baru) {//jika penginputan nilai_baru dilakukan
layar.setText(a);//input nilai di objek kelas sesuai dengan a
angka_baru = false;//soalnya inputnya kan 1 kali dimasukan ke layar
}
else {//jika tidak
if (layar.getText().equals("0")) {//jika nilai di objek kelas layar dibandingkan dengan 0
layar.setText(a);//masukkan nilai a pada objek kelas layar
}
else {//jika tidak
a = layar.getText() + a;//untuk nilai inputan ke2,ke3,ke4,dll
layar.setText(a);//masukkan nilai a pada objek kelas laya
}
}
}
public void operasi(String a) {//method class operasi
String ambil_angka = layar.getText();//menjadikan nilai yang diinputkan ke objek kelas layar menjadi nilai objek fungsi kelas ambil_angka
if (angka_baru && bukan_angka != "=") {//membandingkan variabel objek kelas angka_baru apakah bernilai =
}
else {//jika tidak
angka_baru = true;//nilai angka_baru adalah benar
if (bukan_angka == "+") {//jika nilai kelas fungsi objek sama dengan parameter +
bil_1 += Double.parseDouble(ambil_angka);//menyimpan bilangan sebelumnya
bukan_angka = a;//memasukkan nilai fungsi bukan_angka ke a
}
else if (bukan_angka == "*") {//jika nilai kelas fungsi objek sama dengan parameter *
bil_1 *= Double.parseDouble(ambil_angka);//menyimpan bilangan sebelumnya
bukan_angka = a;//memasukkan nilai fungsi bukan_angka ke a
}
else if (bukan_angka == "/") {//jika nilai kelas fungsi objek sama dengan parameter /
bil_1 /= Double.parseDouble(ambil_angka);//menyimpan bilangan sebelumnya
bukan_angka = a;//memasukkan nilai fungsi bukan_angka ke a
}
else if (bukan_angka == "-") {//jika nilai kelas fungsi objek sama dengan parameter -
bil_1 -= Double.parseDouble(ambil_angka);//menyimpan bilangan sebelumnya
bukan_angka = a;//memasukkan nilai fungsi bukan_angka ke a
}
else {
bil_1 = Double.parseDouble(ambil_angka);//menyimpan bilangan sebelumnya
bukan_angka = a;//memasukkan nilai fungsi bukan_angka ke a
}
}
String koma_nol = Double.toString(bil_1);//deklarasi nilai variabel fungsi koma_nol=konversi nilai variabel fungsi bil_1 dari tipe double ke tipe string
if (koma_nol.endsWith(".0")) {//jika nilai variabel fungsi koma_nol diakhiri dengan parameter .0
koma_nol = koma_nol.substring(0, koma_nol.trim().length() - 2); //nilai variabel fungsi koma_nol=nilai koma_nol deangan mengabaikan spasi dan digit desimal adalah 2
}
layar.setText(koma_nol);//memasukkan nilai variabel koma_nol ke objek kelas layar
}
public void koma(String a) { //method class koma dengan parameter a bertipe string
String titik = layar.getText(); //nilai variabel tiik diinputkan ke objek kelas layar
if (angka_baru) { //pengandaian untuk nilai variable fungsi angka_baru
layar.setText("0."); //menginputkan parameter 0. ke objek kelas layar
angka_baru = false; //angka_baru bernilai false
}
else { //pilihan lain
if (titik.indexOf(".") == -1) { //jika nilai variabel fungsi titik mempunyai indeks parameter . bernilai =1
titik = titik + ".";//nilai fungsi variabel titik ditambahkan dengan parameter .
}
}
layar.setText(titik); //memasukkan nilai variabel fungsi titik ke kelas objek layar
}
//jika tombol % atau +/- ditekan
public void persen_negatif(String a) { //method class persen_negatif dengan parameter a bertipe string
if (a == "%") { //jika nilai a=parameter %
bil_1 = (Double.parseDouble(layar.getText())) / 100;// bil pertama dikalikan bilangan baru dibagi 100
}
else {
bil_1 = (Double.parseDouble(layar.getText())) * -1; // bilangan di layar dikalian -1
}
String koma_nol = Double.toString(bil_1); //nilai parameter string koma_nol adala hasil konversi nilai bil_1 ke tipe string dari tipe double
if (koma_nol.endsWith(".0")) { //jika nilai variabel fungsi koma_nol diakhiri dengan indeks parameter .0
koma_nol = koma_nol.substring(0, koma_nol.trim().length() - 2); //nilai variabel fungsi koma_nol=nilai koma_nol deangan mengabaikan spasi dan digit desimal adalah 2
}
layar.setText(koma_nol); //memasukkan nilai variabel fungsi koma_nol ke objek kelas layar
}
// jika tombol C / CE di tekan
public void hapus(String a) { //method class hapus dengan parameter a bertipe string
if (a == "C") { // Maka bil_1 dan bilangan di layar dihapus
layar.setText("0"); //menginputkan nilai parameter 0 di objek kelas layar
bukan_angka = ""; //nilai parameter variabel fungsi bukan_angka adalah null
bil_1 = 0; //nilai parameter fungsi bil_1=benar
angka_baru = true; //dapat menginputkan nilai baru
}
else {// Bilangan di layar saja yang di hapus
layar.setText("0"); //menginputkan nilai parameter 0 di objek kelas layar
angka_baru = true; //dapat menginputkan nilai baru
}
}
}