需要实现进制的相互转换,十六进制到十进制,按住SHIFT实现数字旁边的符号的功能,需要用键盘监听,但我不是很懂,不会添加,请大仙帮帮我!!
代码如下:
以下是简单的计算器程序,可以进行求开根以及幂的功能,还可以十进制转换成二进制及十六进制,但我想实现相互的转换,在1.2.3.4.5.6分别添加了a到f 想用键盘按住shift键来实现,要添加一个键盘监听,但不知道怎么添加,怎么修改,请路过的大仙帮帮忙!!!
原程序如下:
import java.awt.*; 
import java.awt.event.*; 
import java.lang.*;public class sisuanjik implements ActionListener { 
MenuBar mb; 
Frame win=new Frame("jisuanqi"); 
Label label=new Label(); 
Panel num=new Panel(); 
Panel meth=new Panel(); 
TextArea display=new TextArea(); 
Button add1,sub,mul,div,sqrt,mee; 
Button hex,ox; 
int no1,no2,no4; 
float no3; 
double no5,no6;
String ch,ch3,ch5,ch6; 
Button res=new Button("="); 
Button canc=new Button("CE"); 
Button but7=new Button("7"); 
Button but8=new Button("8"); 
Button but9=new Button("9"); 
Button but4=new Button("4(D)"); 
Button but5=new Button("5(E)"); 
Button but6=new Button("6(F)"); 
Button but1=new Button("1(A)"); 
Button but2=new Button("2(B)"); 
Button but3=new Button("3(C)"); 
Button but0=new Button("0"); 
public void test() 
{ add1=new Button("+"); 
sub=new Button("-"); 
mul=new Button("*"); 
div=new Button("/"); 
sqrt=new Button("sqrt");
mee=new Button("^");
hex=new Button("十六进制"); 
ox=new Button("二进制"); 
win.setLayout(new GridLayout(4,0)); 
num.setLayout(new GridLayout(4,3)); 
meth.setLayout(new GridLayout(0,4)); 
num.add(but7); 
num.add(but8); 
num.add(but9); 
num.add(but4); 
num.add(but5); 
num.add(but6); 
num.add(but1); 
num.add(but2); 
num.add(but3); 
num.add(but0); 
num.add(canc); 
num.add(res); 
but0.addActionListener(this); 
but1.addActionListener(this); 
but2.addActionListener(this); 
but3.addActionListener(this); 
but4.addActionListener(this); 
but5.addActionListener(this); 
but6.addActionListener(this); 
but7.addActionListener(this); 
but8.addActionListener(this); 
but9.addActionListener(this); 
canc.addActionListener(new CE()); 
add1.addActionListener(new METH()); 
sub.addActionListener(new METH()); 
mul.addActionListener(new METH()); 
div.addActionListener(new METH()); 
res.addActionListener(new RES()); 
hex.addActionListener(new H()); 
ox.addActionListener(new O()); 
sqrt.addActionListener(new sq()); 
mee.addActionListener(new METH()); 
add1.setSize(5, 5); 
meth.add(add1); 
meth.add(sub); 
meth.add(mul); 
meth.add(div); 
meth.add(hex); 
meth.add(ox); 
meth.add(sqrt); 
meth.add(mee); 
win.add(display); 
win.add(num); 
win.add(meth); 
win.add(label); 
win.setSize(400,400); 
win.setVisible(true); 
win.addWindowListener(new WindowAdapter(){ 
public void windowClosing(WindowEvent e){ 
System.exit(0); 

}); 

public void actionPerformed(ActionEvent e){ 
display.setBackground(Color.white); 
display.append(e.getActionCommand()); 

private class CE implements ActionListener{ 
public void actionPerformed(ActionEvent ex){ 
display.setBackground(Color.white); 
display.setText(""); 
no1=0; 
no2=0; 
no3=0; 
no4=0;
no5=0; 
no6=0;} 

private class METH implements ActionListener{ 
public void actionPerformed(ActionEvent ey){ 
no1=Integer.parseInt(display.getText()); 
display.setText(""); 
ch=ey.getActionCommand(); 

} private class RES implements ActionListener{ 
public void actionPerformed(ActionEvent es){ 
no2=Integer.parseInt(display.getText()); 
if(ch=="+") 
{no3=no1+no2; 
ch3=Float.toString(no3); 
display.setText(ch3); 

else if(ch=="-") 
{no3=no1-no2; 
ch3=Float.toString(no3); 
display.setText(ch3); 

else if(ch=="*") 
{no3=no1*no2; 
ch3=Float.toString(no3); 
display.setText(ch3); 

else if(ch=="/") 
{no3=(float)no1/no2; 
ch3=Float.toString(no3); 
display.setText(ch3); 

else if(ch=="^") 
{int i=0,m=no1;
 double s=1;
for (i=1;i<=no2;i++)
s=s*m;
no6=s;
ch6=Double.toString(no6); 
display.setText(ch6); 
}  

}
private class sq implements ActionListener{ 
public void actionPerformed(ActionEvent ec){ 
no5=Double.parseDouble(display.getText());  if (no5 < 0) {
         }
  else
      ch5 = Double.toString(Math.sqrt(no5));
      display.setText(ch5);
      
}
}private class H implements ActionListener{ 
public void actionPerformed(ActionEvent ed){ 
no4=Integer.parseInt(display.getText()); 
display.setText(""); 
int[] c=new int[10]; 
int t=0,i=0; 
do 

c[t]=no4%16; 
t++; 
no4=no4/16; 
} while((no4/16)!=0); 
c[t]=no4%16; 
for(i=t;i>=0;i--) 

if(c[i]==10) 
display.append("A"); 
else if(c[i]==11) 
display.append("B"); 
else if(c[i]==12) 
display.append("C"); 
else if(c[i]==13) 
display.append("D"); 
else if(c[i]==14) 
display.append("E"); 
else if(c[i]==15) 
display.append("F"); 
else display.append(Integer.toString(c[i])); 



private class O implements ActionListener{ 
public void actionPerformed(ActionEvent e){ 
no4=Integer.parseInt(display.getText()); 
int a[]; 
display.setText(""); 
a=new int[30]; 
int i=0; 
while(no4/2!=0) 

a[i]=no4%2; 
no4=no4/2; 
i++; 

a[i]=no4%2; 
for(;i>=0;i--) 
display.append(Integer.toString(a[i])); 


public static void main (String[]args){ 
sisuanjik s=new sisuanjik(); 
s.test(); 

}

解决方案 »

  1.   

    添加键盘事件比较容易,JAVA中有键盘操作的类。具体可以随便找一本JAVA书籍,上面都有介绍。至于进制转换嘛 JAVA中含有进制转换的类,不需要手写的 可以查一下API
      

  2.   

     * @see KeyEvent
     * @see KeyAdapter
     * @see MouseEvent
     * @see MouseAdapter
     * @see MouseMotionAdapter在这几个事件中都可以使用
    public boolean isShiftDown()
    来判断是否按下shift键。