Antarmuka kalkulator ini meniru kalkulator sederhana yang disertakan dengan Windows, termasuk antarmuka interaktif dan respons terhadap berbagai masukan. Fungsi bilah menu dan tombol memori belum diterapkan.
Copy kode kodenya sebagai berikut:
impor java.awt.Color;
impor java.awt.Container;
impor java.awt.GridLayout;
impor java.awt.Insets;
impor java.awt.event.ActionEvent;
impor java.awt.event.ActionListener;
impor javax.swing.JFrame;
impor javax.swing.JButton;
impor javax.swing.JMenu;
impor javax.swing.JMenuBar;
impor javax.swing.JMenuItem;
impor javax.swing.JPanel;
impor javax.swing.JTextField;
impor javax.swing.SwingConstants;
impor javax.swing.plaf.basic.BasicBorders;
Kalkulator kelas publik memperluas JFrame {
serialVersionUID panjang akhir statis pribadi = 1L;
Wadah c = getContentPane();
StringBuilder number1 = new StringBuilder("");//Menyimpan string angka pertama
StringBuilder number2 = new StringBuilder("");//Menyimpan string numerik kedua
Operator StringBuilder = StringBuilder baru("");//Operator penyimpanan
Hasil StringBuilder = new StringBuilder("");//Hasil operasi penyimpanan
JTextField numbershow = new JTextField("0.");//Area tampilan angka, tampilan awal adalah "0."
public static void main(String[] args) {//metode utama
Kalkulator c1 = Kalkulator baru();
c1.setVisible(benar);
}
Kalkulator publik() {// Metode konstruksi kalkulator
setTitle("Kalkulator");
setBatas(100, 100, 260, 245);
setResizable(salah);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();//Buat bilah menu
createNumberShow();//Membuat area tampilan angka
createMemoShow();//Membuat tampilan memori
createClearButtons();//Buat tiga tombol seperti Backspace, CE, dan C
createButtonArea();//Membuat area tombol angka
}
private void createMenuBar() {//Metode untuk membuat bilah menu
Bilah menu JMenuBar = JMenuBar baru();
setJMenuBar(bilah menu);
JMenu menu1 = JMenu baru("Edit");
JMenu menu2 = JMenu baru("Lihat");
JMenu menu3 = JMenu baru("Bantuan");
menubar.tambahkan(menu1);
menubar.tambahkan(menu2);
menubar.tambahkan(menu3);
JMenuItem menu1item1 = JMenuItem baru("Salin");
JMenuItem menu1item2 = JMenuItem baru("Tempel");
JMenuItem menu2item1 = JMenuItem baru("tipe standar");
JMenuItem menu2item2 = new JMenuItem("Ilmiah");
JMenuItem menu2item3 = new JMenuItem("Pengelompokan Ilmiah");
JMenuItem menu3item1 = new JMenuItem("Topik Bantuan");
JMenuItem menu3item2 = new JMenuItem("Tentang Kalkulator");
menu1.tambahkan(menu1item1);
menu1.tambahkan(menu1item2);
menu2.tambahkan(menu2item1);
menu2.tambahkan(menu2item2);
menu2.tambahkan(menu2item3);
menu3.tambahkan(menu3item1);
menu3.tambahkan(menu3item2);
}
private void createNumberShow() {//Metode untuk membuat area tampilan angka
numbershow.setHorizontalAlignment(JTextField.RIGHT);
pertunjukan angka.setBounds(5, 0, 245, 22);
numbershow.setEnabled(salah);
numbershow.setDisabledTextColor(Warna.HITAM);
c.tambahkan(pertunjukan angka);
}
private void createMemoShow() {//Metode untuk membuat tampilan memori
Memoshow JTextField = JTextField baru();
memoshow.setEditable(salah);
memoshow.setBounds(10, 30, 28, 22);
memoshow.setBorder(BasicBorders.FieldBorder(Warna.hitam,
Warna.hitam, Warna.putih, Warna.putih));
c.tambahkan(memoshow);
}
private void createClearButtons() {// Metode untuk membuat tiga tombol seperti Backspace, CE, dan C
JButton[] tombol hapus = JButton baru[3];
String[] clearbuttontext = { "Backspace", "CE", "C" };
untuk (int saya = 0; saya < 3; saya++) {
tombol hapus[i] = JButton baru();
tombol hapus[i].setText(teks tombolhapus[i]);
tombol hapus[i].setHorizontalAlignment(SwingConstants.CENTER);
tombol hapus[i].setMargin(Inset baru(0, 0, 0, 0));
tombol hapus[i].setFont(java.awt.Font baru("Arial", 0, 9));
clearbutton[i].setForeground(Warna.biru);
tombol hapus[i].setBounds(48 + i * 68, 30, 63, 22);
clearbutton[i].setForeground(Warna.merah);
c.tambahkan(tombol hapus[i]);
}
clearbutton[0].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol Backspace
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// Jika tidak ada input yang dibuat
showNumber(numbershow, number1);//tampilkan nomor1
} else if (operator.toString().equals("")) {// Jika hanya angka 1 yang dimasukkan
number1.deleteCharAt(number1.toString().length() - 1); // Hapus karakter terakhir dari number1
showNumber(numbershow, number1);//tampilkan nomor1
} else if (number2.toString().equals("")) {// Jika hanya angka1 dan operator yang dimasukkan
showNumber(numbershow, number1);//Tidak ada pemrosesan, tampilkan nomor1
} else {// Jika nomor1, operator, nomor2 dimasukkan
number2.deleteCharAt(number2.toString().length() - 1); // Hapus karakter terakhir dari number2
showNumber(numbershow, number2);//tampilkan nomor2
}
}
});
clearbutton[1].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol CE
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// Jika tidak ada input yang dibuat
showNumber(numbershow, number1);//tampilkan nomor1
} else if (operator.toString().equals("")) {// Jika hanya angka 1 yang dimasukkan
number1.setLength(0);//Hapus nomor1
showNumber(numbershow, number1);//tampilkan nomor1
} else if (number2.toString().equals("")) {// Jika nomor1 dan operator dimasukkan
showNumber(numbershow, number2);//Tidak ada pemrosesan, tampilkan nomor2
} else {// Jika nomor1, operator, nomor2 dimasukkan
number2.setLength(0);//Hapus nomor2
showNumber(numbershow, number2);//tampilkan nomor2
}
}
});
clearbutton[2].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol C
@Mengesampingkan
public void actionPerformed(ActionEvent e) {// Kosongkan semua penyimpanan
nomor1.setLength(0);
nomor2.setLength(0);
operator.setPanjang(0);
pertunjukan nomor.setText("0.");
hasil.setLength(0);
}
});
}
private void createButtonArea() {//Metode untuk membuat area tombol digital
Area Tombol JPanel = JPanel baru();
ButtonArea.setBounds(5, 55, 245, 125);
ButtonArea.setLayout(GridLayout baru(4, 6, 5, 5));
c.tambahkan(Area Tombol);
JButton[] tombol angka = JButton baru[24];
String[] numberbuttontext = { "MC", "7", "8", "9", "/", "sqrt", "MR",
"4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/X", "M+",
"0", "+/-", ".", "+", "=" };
for (int i = 0; i < 24; i++) {// Gunakan loop untuk menambahkan label ke 24 tombol ini
tombol nomor[i] = JButton baru(tekstombol nomor[i]);
ButtonArea.add(tombolangka[i]);
if (i % 6 == 0 || i % 6 == 4 || i == 23) {// Tombol operator disetel ke warna merah
tombol nomor[i].setHorizontalAlignment(SwingConstants.CENTER);
tombol nomor[i].setMargin(Inset baru(0, 0, 0, 0));
tombol nomor[i].setFont(java.awt.Font baru("Arial", 0, 9));
tombol nomor[i].setForeground(Warna.merah);
} else {//Setelan lainnya berwarna biru
tombol nomor[i].setHorizontalAlignment(SwingConstants.CENTER);
tombol nomor[i].setMargin(Inset baru(0, 0, 0, 0));
tombol nomor[i].setFont(java.awt.Font baru("Arial", 0, 9));
tombol nomor[i].setForeground(Warna.biru);
}
}
int[] angka = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };//Angka-angka dalam array ini masing-masing mewakili nomor seri dari angka 0-9 dalam array numberbuttontext
for (int i = 0; i <= 9; i++) { // Gunakan loop untuk menambahkan pendengar untuk sepuluh tombol angka 0-9
String terakhir str = String.valueOf(i);
numberbutton[numbers[i]].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol 0-9
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// Sebelum operator dimasukkan
add(number1, str); // Hanya tetapkan nilai number1
showNumber(numbershow, number1);//Hanya menampilkan nilai angka1
} else {// Setelah masuk ke operator
add(number2, str);//Hanya atur nilai number2
showNumber(numbershow, number2);//Hanya menampilkan nilai angka2
}
}
});
}
numberbutton[20].addActionListener(new ActionListener() { //Tambahkan pendengar untuk tombol "+/-"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// Sebelum operator dimasukkan
add(number1, "+/-");// Tetapkan hanya nilai number1
showNumber(numbershow, number1);//Hanya menampilkan nilai angka1
} else {// Setelah masuk ke operator
add(number2, "+/-");// Tetapkan hanya nilai number2
showNumber(numbershow, number2);//Hanya menampilkan nilai angka2
}
}
});
numberbutton[21].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "."
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// Sebelum memasukkan operator, hanya nilai angka1 yang ditampilkan
tambahkan(nomor1, ".");
showNumber(angka tampil, angka 1);
} else {// Setelah memasukkan operator, hanya nilai angka2 yang ditampilkan
tambahkan(nomor2, ".");
showNumber(angka tampil, angka 2);
}
}
});
numberbutton[22].addActionListener(new ActionListener() { //Tambahkan pendengar untuk tombol "+"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
operator.setPanjang(0);
operator.tambahkan("+");
}
});
numberbutton[16].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "-"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
operator.setPanjang(0);
operator.tambahkan("-");
}
});
numberbutton[10].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "*"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
operator.setPanjang(0);
operator.tambahkan("*");
}
});
numberbutton[4].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "/"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
operator.setPanjang(0);
operator.tambahkan("/");
}
});
numberbutton[23].addActionListener(new ActionListener() { //Tambahkan pendengar untuk tombol "="
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// Saat nomor1 kosong
showNumber(angka tampil, angka 1);
} else if (operator.toString().equals("")) {// Ketika angka1 tidak kosong dan operator kosong
showNumber(angka tampil, angka 1);
} else if (number2.toString().equals("")) {// Ketika nomor1 dan operator tidak kosong, namun nomor2 kosong
beralih (operator.toString()) {
kasus ("+"): {
nomor2.tambahkan(nomor1.toString());
double d = Double.parseDouble(angka1
.toString())
+ Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("-"): {
nomor2.tambahkan(nomor1.toString());
double d = Double.parseDouble(angka1
.toString())
- Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("*"): {
nomor2.tambahkan(nomor1.toString());
double d = Double.parseDouble(angka1
.toString())
* Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("/"): {
nomor2.tambahkan(nomor1.toString());
double d = Double.parseDouble(angka1
.toString())
/ Double.parseDouble(number2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
}
} else {// Jika nomor1, operator, nomor2 tidak kosong
beralih (operator.toString()) {
kasus ("+"): {
double d = Double.parseDouble(angka1
.toString())
+ Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("-"): {
double d = Double.parseDouble(angka1
.toString())
- Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("*"): {
double d = Double.parseDouble(angka1
.toString())
* Ganda.parseDouble(angka2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
kasus ("/"): {
double d = Double.parseDouble(angka1
.toString())
/ Double.parseDouble(number2.toString());
hasil.setLength(0);
hasil.tambahkan(d);
showNumber(angka tampil, hasil);
nomor1.setLength(0);
nomor1.tambahkan(d);
}
merusak;
}
}
}
});
numberbutton[17].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "1/x"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//Ketika angka1 tidak dimasukkan
numbershow.setText("Pembagi tidak boleh nol");
} else if (operator.toString().equals("")) {//number1 dimasukkan, namun operator tidak dimasukkan
if (Double.parseDouble(number1.toString()) == 0) {// Jika nilai number1 adalah nol
numbershow.setText("Pembagi tidak boleh nol");
} else {// Jika nilai angka1 bukan nol
double d = 1 / (Double.parseDouble(angka1
.toString()));
nomor1.setLength(0);
number1.append(d);//Membuka dan menyimpan nilai number1
showNumber(angka tampil, angka 1);
}
} else if (number2.toString().equals("")) {//number1 dan operator dimasukkan, namun number2 tidak dimasukkan
double d = 1 / (Double.parseDouble(angka1
.toString()));
number2.append(d);//Membuka dan menyimpan nilai number1
showNumber(angka tampil, angka 2);
} else {//Masukkan nomor1, operator, nomor2
double d = 1 / (Double.parseDouble(angka2
.toString()));
nomor2.setLength(0);
number2.append(d);//Membuka dan menyimpan nilai number2
showNumber(angka tampil, angka 2);
}
}
});
numberbutton[11].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "%"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
// Sementara kosong
}
});
numberbutton[5].addActionListener(new ActionListener() {//Tambahkan pendengar untuk tombol "sqrt"
@Mengesampingkan
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//Ketika angka1 tidak dimasukkan
showNumber(angka tampil, angka 1);
} else if (operator.toString().equals("")) {//number1 dimasukkan, namun operator tidak dimasukkan
jika (Double.parseDouble(number1.toString()) < 0) {// angka1 kurang dari 0
numbershow.setText("Input fungsi tidak valid");
} else {// angka1 lebih besar dari 0
double d = Math.sqrt(Double.parseDouble(angka1
.toString()));
nomor1.setLength(0);
number1.append(d);//Membuka dan menyimpan nilai number1
showNumber(angka tampil, angka 1);
}
} else if (number2.toString().equals("")) {//number1 dan operator dimasukkan, namun number2 tidak dimasukkan
double d = Math.sqrt(Double.parseDouble(angka1
.toString()));
number2.append(d);//Membuka dan menyimpan nilai number1
showNumber(angka tampil, angka 2);
} else {//Masukkan nomor1, operator, nomor2
double d = Math.sqrt(Double.parseDouble(angka2
.toString()));
nomor2.setLength(0);
number2.append(d);//Membuka dan menyimpan nilai number2
showNumber(angka tampil, angka 2);
}
}
});
}
public void add(StringBuilder s1, String s2) {// Tentukan metode untuk mengubah string digital setelah input tombol
if (s2.equals("+/-")) {// Menentukan perubahan string digital setelah memasukkan "+/-"
if (s1.toString().equals("") || s1.toString().equals("0")) {// Jika string numerik kosong atau 0, tidak ada perubahan yang akan terjadi
s1.tambahkan("");
} else {// Jika string numerik tidak kosong atau 0, tambahkan atau hapus karakter "-" sebelum string numerik
if (s1.toString().startsWith("-")) {
s1.deleteCharAt(0);
} kalau tidak {
s1.masukkan(0, "-");
}
}
}
if (s2.equals(".")) {// Menentukan perubahan string digital setelah memasukkan "."
if (s1.toString().indexOf(".") == -1) {// Temukan apakah string angka berisi karakter ".", jika tidak, jalankan kode berikut
if (s1.toString().equals("")) {// Jika string numerik kosong, setel string numerik ke "0".
s1.setPanjang(0);
s1.tambahkan("0.");
} kalau tidak {
s1.tambahkan(".");
}
} else {// Jika ada, tidak akan terjadi perubahan
s1.tambahkan("");
}
}
if (s2.equals("0")) {// Menentukan perubahan string digital setelah memasukkan "0"
if (s1.toString().equals("0")) {// Ketika string angka adalah "0", tidak ada perubahan yang terjadi
s1.tambahkan("");
} else {// Jika string angkanya adalah "0", tambahkan "0" setelah string tersebut
s1.tambahkan("0");
}
}
for (int i = 1; i < 10; i++) {//Melalui loop, tentukan perubahan dalam string digital setelah memasukkan 1-9
String str = String.valueOf(i);
if (s2.equals(str)) {// Mendefinisikan perubahan string digital setelah memasukkan 1-9
if (s1.toString().sama dengan("0")) {
s1.setPanjang(0);
s1.tambahkan(str);
} kalau tidak
s1.tambahkan(str);
}
}
}
public void showNumber(JTextField j, StringBuilder s) {//Metode untuk menentukan cara menampilkan string numerik di area tampilan angka
if (s.toString().equals("") == benar || s.toString().equals("0") == benar) {
j.setText("0.");
} else if (s.toString().indexOf(".") == -1) {
j.setText(s.toString() + ".");
} kalau tidak {
j.setText(s.toString());
}
}
}