软件NetBeans IDE 7.0.1,需要单独写主类。
要求:有图形界面,除加减乘除外,还要实现二进制,八进制,十进制,十六进制的相互转换。
主类:
public static void main(String[] args) {
// TODO code application logic here
Calculator c=new Calculator();
}
主代码:
package newpackage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener{
String num1,num2,num3,option;
JTextField jtf;
boolean flag=false;
public Calculator (){
JFrame jf=new JFrame("计算器");
jf.setSize(400,400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jtf=new JTextField(20);
JPanel jp=new JPanel();
JPanel jp1=new JPanel();
jp.setLayout(new GridLayout(5,4));
String a[] = {"1","2","3","4","5","6","7","8","9","0","+","-","×","÷" ,"C","."};
for(int i=0;i<a.length;i++){
JButton b=new JButton(a[i]);
jp.add(b);
b.addActionListener(this);
}
String b[]={"BIN","OCT","HEX","正负","="};
for(int i=0;i<b.length;i++){
JButton b1=new JButton(b[i]);
jp1.add(b1);
b1.addActionListener(this);
}
jf.add(jtf,BorderLayout.NORTH);
jf.add(jp, BorderLayout.CENTER);
jf.add(jp1,BorderLayout.SOUTH);
jf.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String get1=e.getActionCommand();
if("0123456789".indexOf(get1)!=-1){
if(flag){
String input=jtf.getText();
jtf.setText(input+get1);
}else{
jtf.setText(get1);
; flag=true;
}
}
if("正负".equals(get1)){
String a=jtf.getText();
int b=Integer.valueOf(a);
b=b*(-1);
jtf.setText(Integer.toString(b));
}
if("+-×÷BINOCTHEX".indexOf(get1)!=-1){
option=jtf.getText();
num1=get1;
flag=false;
}
if(".".equals(get1)){
String b=jtf.getText();
if(b.length()==0){
JOptionPane.showMessageDialog(this, "操作不合法!", "提示", DISPOSE_ON_CLOSE);
flag=true;
}else if(b.indexOf(".")!=-1){
JOptionPane.showMessageDialog(this, "操作不合法!", "提示", DISPOSE_ON_CLOSE);
flag = true;
}else{
jtf.setText(b+".");
}
}
if("C".equals(get1)){
jtf.setText(null);
}
if("BIN".equals(get1)){
num2=jtf.getText();
double d1=Double.parseDouble(option );
double d2=Double.parseDouble(num2);
int d=(int)d1;
StringBuilder sb=new StringBuilder();
double r=d1-d;
if(r!=0){
int re=0,qu=0;
while(d!=0){
qu=d/2;
re=d%2;
sb.append(re);
d=qu;
}
sb.reverse();
sb.append(".");
int count=32;
double num=0;
while(r>0.0000000001){
count--;
if(count==0){
try {
throw new Exception("Error!");
} catch (Exception ex) {
Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
}
}
num=r*2;
if(num>=1){
sb.append(1);
r=num-1;
}else{
sb.append(0);
r=num;
}
d1=Double.parseDouble(sb.toString());
}
num2=d1+"";
jtf.setText(num2);
flag=false;
}else{
String a= Integer.toBinaryString(d);
d1= Double.parseDouble(a);
}
}
if("OCT".equals(get1)){
num2=jtf.getText();
double d1=Double.parseDouble(option );
double d2=Double.parseDouble(num2);
int d=(int)d1;
StringBuilder sb=new StringBuilder();
double r=d1-d;
if(r!=0){
int re=0,qu=0;
while(d!=0){
qu=d/8;
re=d%8;
sb.append(re);
d=qu;
}
sb.reverse();
sb.append(".");
int count=32;
double num=0;
while(r>0.0000000001){
count--;
if(count==0){
try {
throw new Exception("Error!");
} catch (Exception ex) {
Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
}
}
num=r*8;
if(num>=0){
int a1=(int)num;
sb.append(a1);
r=num-a1;
}
d1=Double.parseDouble(sb.toString());
}
num2=d1+"";
jtf.setText(num2);
flag=false;
}else{
String a= Integer.toOctalString(d);
d1= Double.parseDouble(a);
}
}
if("HEX".equals(get1)){
num2=jtf.getText();
double d1=Double.parseDouble(option );
double d2=Double.parseDouble(num2);
int d=(int)d1;
StringBuilder sb=new StringBuilder();
double r=d1-d;
if(r!=0){
String a= Integer.toHexString(d);
sb.append(a);
sb.reverse();
sb.append(".");
int count=32;
double num=0;
while(r>0.0000000001){
count--;
if(count==0){
try {
throw new Exception("Error!");
} catch (Exception ex) {
Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
}
}
num=r*16;
String a2=null;
if(num>=0){
int a1=(int)num;
if(a1==10){
a2="A";
sb.append(a2);
}else if(a1==11){
a2="B";
}else if(a1==12){
a2="C";
}else if(a1==13){
a2="D";
}else if(a1==14){
a2="E";
}else if(a1==15){
a2="F";
}else{
a2=Integer.toHexString(a1);
}
sb.append(a2);
r=num-a1;
}
}
jtf.setText(sb.toString());
flag=false;
}
else{
int ff=(int)d1;
String a= Integer.toHexString(ff);
jtf.setText(a);
flag=false;
}
}
if("=".equals(get1)){
num2=jtf.getText();
double d1=Double.parseDouble(option );
double d2=Double.parseDouble(num2);
if("+".equals(num1)){
d1=d1+d2;
}else if("×".equals(num1)){
d1=d1*d2;
}else if("÷".equals(num1)){
d1=d1/d2;
}else if("-".equals(num1)){
d1=d1-d2;
}
num2=d1+"";
jtf.setText(num2);
flag=false;
}
}
}