import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
CurrencyConversion(){
setTitle("Currency Conversion Program");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,250);
setResizable(false);
//USD to Riel conversion interface
lblcbkh
=new JLabel("Select exchange rate:"); btuskh.addActionListener(this);
txtus.addKeyListener(new KeyList());
txtkh.addKeyListener(new KeyList());
Object[] ratekh
={3800,
3900,
4000,
4100,
4200}; cbratekh.setEditable(true);
cbratekh.getEditor().getEditorComponent().addKeyListener(new KeyList());
panelt1.add(lblcbkh);
panelt1.add(cbratekh);
panelt1.add(lblus);
panelt1.add(txtus);
panelt1.add(lblkh);
panelt1.add(txtkh);
panelt1.add(btuskh);
//EURO and USD conversion interface
lblcbus
=new JLabel("Select exchange rate:"); bteurous.addActionListener(this);
txteuro.addKeyListener(new KeyList());
txteurous.addKeyListener(new KeyList());
Object[] rateus
={1.25,
1.28,
1.30,
1.32,
1.35,
1.40}; cbrateus.setEditable(true);
cbrateus.getEditor().getEditorComponent().addKeyListener(new KeyList());
panelt2.add(lblcbus);
panelt2.add(cbrateus);
panelt2.add(lbleuro);
panelt2.add(txteuro);
panelt2.add(lbleurous);
panelt2.add(txteurous);
panelt2.add(bteurous);
//Create JTabbedPane object and add panelt1 and panelt2
tbpane.add(panelt1, null, 0);
tbpane.add(panelt2, null, 1);
//Set title to each tab
tbpane.setTitleAt(0,"USD and Riel");
tbpane.setTitleAt(1,"EURO and USD");
//Add tbpane JTabbedPane object to the container
cont.add(tbpane);
setVisible(true);
}
double rate;
double usdamount;
double khamount;
double euroamount;
if(e.getSource()==btuskh){
if(!checkBlank(txtus,txtkh, cbratekh))
if(txtkh.getText().equals("")){ //USD to Riel conversion
rate
=Double.
parseDouble(cbratekh.
getSelectedItem().
toString()); usdamount
=Double.
parseDouble(txtus.
getText()); khamount=usdToKH(rate,usdamount);
txtkh.setText(""+khamount);
}
else if(txtus.getText().equals("")) { //Riel to USD conversion
rate
=Double.
parseDouble(cbratekh.
getSelectedItem().
toString()); khamount
=Double.
parseDouble(txtkh.
getText()); usdamount=khToUSD(rate,khamount);
txtus.setText(""+usdamount);
}
else{
showMessage("Please leave the result text box blank");
}
}
else if(e.getSource()==bteurous){
if(!checkBlank(txteurous,txteuro, cbrateus))
if(txteurous.getText().equals("")){ //Euro to USD conversion
rate
=Double.
parseDouble(cbrateus.
getSelectedItem().
toString()); euroamount
=Double.
parseDouble(txteuro.
getText()); usdamount=euroToUSD(rate,euroamount);
txteurous.setText(""+usdamount);
}
else if(txteuro.getText().equals("")) { // USD to EURO conversion
rate
=Double.
parseDouble(cbrateus.
getSelectedItem().
toString()); usdamount
=Double.
parseDouble(txteurous.
getText()); euroamount=usdToEuro(rate,usdamount);
txteuro.setText(""+euroamount);
}
else{
showMessage("Please leave the result text box blank");
}
}
}
aW1wb3J0IGphdmEuYXd0Lio7CmltcG9ydCBqYXZhLmF3dC5ldmVudC4qOwppbXBvcnQgamF2YXguc3dpbmcuKjsKaW1wb3J0IGphdmF4LnN3aW5nLmV2ZW50Lio7CgpjbGFzcyAgQ3VycmVuY3lDb252ZXJzaW9uIGV4dGVuZHMgSkZyYW1lIGltcGxlbWVudHMgQWN0aW9uTGlzdGVuZXJ7CiAgICAgICAgICAgIEpUYWJiZWRQYW5lIHRicGFuZTsKICAgICAgICAgICAgSlBhbmVsIHBhbmVsdDE7CiAgICAgICAgICAgIEpMYWJlbCBsYmx1czsKICAgICAgICAgICAgSkxhYmVsIGxibGtoOwogICAgICAgICAgICBKTGFiZWwgbGJsY2JraDsKICAgICAgICAgICAgSlRleHRGaWVsZCB0eHR1czsKICAgICAgICAgICAgSlRleHRGaWVsZCB0eHRraDsKICAgICAgICAgICAgSkNvbWJvQm94IGNicmF0ZWtoOwogICAgICAgICAgICBKQnV0dG9uIGJ0dXNraDsKICAgICAgICAgICAKICAgICAgICAgICAgSlBhbmVsIHBhbmVsdDI7CiAgICAgICAgICAgIEpMYWJlbCBsYmxldXJvOwogICAgICAgICAgICBKTGFiZWwgbGJsZXVyb3VzOwogICAgICAgICAgICBKTGFiZWwgbGJsY2J1czsKICAgICAgICAgICAgSlRleHRGaWVsZCB0eHRldXJvdXM7CiAgICAgICAgICAgIEpUZXh0RmllbGQgdHh0ZXVybzsKICAgICAgICAgICAgSkNvbWJvQm94IGNicmF0ZXVzOwogICAgICAgICAgICBKQnV0dG9uIGJ0ZXVyb3VzOyAgIAogICAgICAgICAgIAoKICAgICAgICAgICAgQ3VycmVuY3lDb252ZXJzaW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICBzZXRUaXRsZSgiQ3VycmVuY3kgQ29udmVyc2lvbiBQcm9ncmFtIik7CiAgICAgICAgICAgICAgICAgICAgICBzZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oRVhJVF9PTl9DTE9TRSk7CiAgICAgICAgICAgICAgICAgICAgICBzZXRTaXplKDMwMCwyNTApOwogICAgICAgICAgICAgICAgICAgICBzZXRSZXNpemFibGUoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICBDb250YWluZXIgY29udD1nZXRDb250ZW50UGFuZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9VU0QgdG8gUmllbCBjb252ZXJzaW9uIGludGVyZmFjZQogICAgICAgICAgICAgICAgICAgICAgbGJsdXM9bmV3IEpMYWJlbCgiVVNEOiIpOwogICAgICAgICAgICAgICAgICAgICAgbGJsa2g9bmV3IEpMYWJlbCgiUmllbDoiKTsKICAgICAgICAgICAgICAgICAgICAgIGxibGNia2g9bmV3IEpMYWJlbCgiU2VsZWN0IGV4Y2hhbmdlIHJhdGU6Iik7CiAgICAgICAgICAgICAgICAgICAgICBidHVza2g9bmV3IEpCdXR0b24oIk9LIik7CiAgICAgICAgICAgICAgICAgICAgYnR1c2toLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOyAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHR4dHVzPW5ldyBKVGV4dEZpZWxkKDEwKTsKICAgICAgICAgICAgICAgICAgICB0eHR1cy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdCgpKTsKICAgICAgICAgICAgICAgICAgICB0eHRraD1uZXcgSlRleHRGaWVsZCgxMCk7CiAgICAgICAgICAgICAgICAgICAgdHh0a2guYWRkS2V5TGlzdGVuZXIobmV3IEtleUxpc3QoKSk7CiAgICAgICAgICAgICAgICAgICAgT2JqZWN0W10gcmF0ZWtoPXszODAwLDM5MDAsNDAwMCw0MTAwLDQyMDB9OwogICAgICAgICAgICAgICAgICAgIGNicmF0ZWtoPW5ldyBKQ29tYm9Cb3gocmF0ZWtoKTsKICAgICAgICAgICAgICAgICAgICBjYnJhdGVraC5zZXRFZGl0YWJsZSh0cnVlKTsKICAgICAgICAgICAgICAgICAgIGNicmF0ZWtoLmdldEVkaXRvcigpLmdldEVkaXRvckNvbXBvbmVudCgpLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlMaXN0KCkpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDE9bmV3IEpQYW5lbCgpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDEuYWRkKGxibGNia2gpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDEuYWRkKGNicmF0ZWtoKTsKICAgICAgICAgICAgICAgICAgICBwYW5lbHQxLmFkZChsYmx1cyk7CiAgICAgICAgICAgICAgICAgICAgcGFuZWx0MS5hZGQodHh0dXMpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDEuYWRkKGxibGtoKTsKICAgICAgICAgICAgICAgICAgICBwYW5lbHQxLmFkZCh0eHRraCk7CiAgICAgICAgICAgICAgICAgICAgcGFuZWx0MS5hZGQoYnR1c2toKTsKICAgICAgICAgICAgICAgICAgICBwYW5lbHQxLnNldExheW91dChuZXcgR3JpZExheW91dCg0LDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy9FVVJPIGFuZCBVU0QgY29udmVyc2lvbiBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIGxibGV1cm89bmV3IEpMYWJlbCgiRXVybzoiKTsKICAgICAgICAgICAgICAgICAgIGxibGV1cm91cz1uZXcgSkxhYmVsKCJVU0Q6Iik7CiAgICAgICAgICAgICAgICAgICAgbGJsY2J1cz1uZXcgSkxhYmVsKCJTZWxlY3QgZXhjaGFuZ2UgcmF0ZToiKTsKICAgICAgICAgICAgICAgICAgICBidGV1cm91cz1uZXcgSkJ1dHRvbigiT0siKTsKICAgICAgICAgICAgICAgICAgIGJ0ZXVyb3VzLmFkZEFjdGlvbkxpc3RlbmVyKHRoaXMpOyAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdHh0ZXVybz1uZXcgSlRleHRGaWVsZCgxMCk7CiAgICAgICAgICAgICAgICAgICAgdHh0ZXVyby5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdCgpKTsKICAgICAgICAgICAgICAgICAgICB0eHRldXJvdXM9bmV3IEpUZXh0RmllbGQoMTApOwogICAgICAgICAgICAgICAgICAgIHR4dGV1cm91cy5hZGRLZXlMaXN0ZW5lcihuZXcgS2V5TGlzdCgpKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3RbXSByYXRldXM9ezEuMjUsMS4yOCwxLjMwLDEuMzIsMS4zNSwxLjQwfTsKICAgICAgICAgICAgICAgICAgICBjYnJhdGV1cz1uZXcgSkNvbWJvQm94KHJhdGV1cyk7CiAgICAgICAgICAgICAgICAgICAgY2JyYXRldXMuc2V0RWRpdGFibGUodHJ1ZSk7CiAgICAgICAgICAgICAgICAgIGNicmF0ZXVzLmdldEVkaXRvcigpLmdldEVkaXRvckNvbXBvbmVudCgpLmFkZEtleUxpc3RlbmVyKG5ldyBLZXlMaXN0KCkpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDI9bmV3IEpQYW5lbCgpOwogICAgICAgICAgICAgICAgICBwYW5lbHQyLnNldExheW91dChuZXcgR3JpZExheW91dCg0LDEpKTsKICAgICAgICAgICAgICAgICAgIHBhbmVsdDIuYWRkKGxibGNidXMpOwogICAgICAgICAgICAgICAgICAgcGFuZWx0Mi5hZGQoY2JyYXRldXMpOwogICAgICAgICAgICAgICAgICAgcGFuZWx0Mi5hZGQobGJsZXVybyk7CiAgICAgICAgICAgICAgICAgICAgcGFuZWx0Mi5hZGQodHh0ZXVybyk7CiAgICAgICAgICAgICAgICAgICAgcGFuZWx0Mi5hZGQobGJsZXVyb3VzKTsKICAgICAgICAgICAgICAgICAgICBwYW5lbHQyLmFkZCh0eHRldXJvdXMpOwogICAgICAgICAgICAgICAgICAgIHBhbmVsdDIuYWRkKGJ0ZXVyb3VzKTsKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy9DcmVhdGUgSlRhYmJlZFBhbmUgb2JqZWN0IGFuZCBhZGQgcGFuZWx0MSBhbmQgcGFuZWx0MgogICAgICAgICAgICAgICAgICAgSlRhYmJlZFBhbmUgdGJwYW5lPW5ldyBKVGFiYmVkUGFuZSgpOwogICAgICAgICAgICAgICAgICAgdGJwYW5lLmFkZChwYW5lbHQxLCBudWxsLCAwKTsKICAgICAgICAgICAgICAgICAgdGJwYW5lLmFkZChwYW5lbHQyLCBudWxsLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgdGl0bGUgdG8gZWFjaCB0YWIKICAgICAgICAgICAgICAgICAgICB0YnBhbmUuc2V0VGl0bGVBdCgwLCJVU0QgYW5kIFJpZWwiKTsKICAgICAgICAgICAgICAgICAgIHRicGFuZS5zZXRUaXRsZUF0KDEsIkVVUk8gYW5kIFVTRCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BZGQgdGJwYW5lIEpUYWJiZWRQYW5lIG9iamVjdCB0byB0aGUgY29udGFpbmVyCiAgICAgICAgICAgICAgICAgICBjb250LmFkZCh0YnBhbmUpOwogICAgICAgICAgICAgICAgICAgIHNldFZpc2libGUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CgpwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByYXRlOwogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdXNkYW1vdW50OwogICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUga2hhbW91bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBldXJvYW1vdW50OwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZihlLmdldFNvdXJjZSgpPT1idHVza2gpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighY2hlY2tCbGFuayh0eHR1cyx0eHRraCwgY2JyYXRla2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eHRraC5nZXRUZXh0KCkuZXF1YWxzKCIiKSl7IC8vVVNEIHRvIFJpZWwgY29udmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlPURvdWJsZS5wYXJzZURvdWJsZShjYnJhdGVraC5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNkYW1vdW50PURvdWJsZS5wYXJzZURvdWJsZSh0eHR1cy5nZXRUZXh0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraGFtb3VudD11c2RUb0tIKHJhdGUsdXNkYW1vdW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0a2guc2V0VGV4dCgiIitraGFtb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodHh0dXMuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsgLy9SaWVsIHRvIFVTRCBjb252ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGU9RG91YmxlLnBhcnNlRG91YmxlKGNicmF0ZWtoLmdldFNlbGVjdGVkSXRlbSgpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraGFtb3VudD1Eb3VibGUucGFyc2VEb3VibGUodHh0a2guZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNkYW1vdW50PWtoVG9VU0QocmF0ZSxraGFtb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dHVzLnNldFRleHQoIiIrdXNkYW1vdW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWVzc2FnZSgiUGxlYXNlIGxlYXZlIHRoZSByZXN1bHQgdGV4dCBib3ggYmxhbmsiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoZS5nZXRTb3VyY2UoKT09YnRldXJvdXMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighY2hlY2tCbGFuayh0eHRldXJvdXMsdHh0ZXVybywgY2JyYXRldXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eHRldXJvdXMuZ2V0VGV4dCgpLmVxdWFscygiIikpeyAvL0V1cm8gdG8gVVNEIGNvbnZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZT1Eb3VibGUucGFyc2VEb3VibGUoY2JyYXRldXMuZ2V0U2VsZWN0ZWRJdGVtKCkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV1cm9hbW91bnQ9RG91YmxlLnBhcnNlRG91YmxlKHR4dGV1cm8uZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNkYW1vdW50PWV1cm9Ub1VTRChyYXRlLGV1cm9hbW91bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRldXJvdXMuc2V0VGV4dCgiIit1c2RhbW91bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHR4dGV1cm8uZ2V0VGV4dCgpLmVxdWFscygiIikpIHsgLy8gVVNEIHRvIEVVUk8gY29udmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlPURvdWJsZS5wYXJzZURvdWJsZShjYnJhdGV1cy5nZXRTZWxlY3RlZEl0ZW0oKS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNkYW1vdW50PURvdWJsZS5wYXJzZURvdWJsZSh0eHRldXJvdXMuZ2V0VGV4dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXVyb2Ftb3VudD11c2RUb0V1cm8ocmF0ZSx1c2RhbW91bnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRldXJvLnNldFRleHQoIiIrZXVyb2Ftb3VudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2UoIlBsZWFzZSBsZWF2ZSB0aGUgcmVzdWx0IHRleHQgYm94IGJsYW5rIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgICB9Cgo=