📄 decimal.java
字号:
/**
*一个在各进制之间相互转换的工具
*新加入了与格雷码的转换
*新加入对数字区按键的支持
*
*author:Skyang 徐阳
*version:1.5
*last modification:2007-03-15
**school:nuaa
*E_mail:twtbj2005@126.com
*QQ:530139481
*
*All rights reserved,it's just for studying and researching,
*you should not use it for other purpose.Thank you!
**/
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Decimal extends JFrame implements KeyListener{
String choices[] = {"二进制","八进制","十进制","十六进制","格雷码"
};
JComboBox c;//下拉列表
JTextField txt1;//输入框
JTextArea txt2;//输出区域
JLabel L1;
Translate tra;
String Type="二进制";
public Decimal(){//构造,初始化
//下拉列表
c = new JComboBox();
for(int i=0;i<5;i++){
c.addItem(choices[i]);
}
c.setFocusable(false);
//输入框
txt1 = new JTextField(40);
txt1.setBounds(230,50,260,30);
txt1.setFocusable(true);
//输出区
txt2 = new JTextArea(4,40);
txt2.setBounds(100,100,400,200);
txt2.setEditable(false);
Container cp = this.getContentPane();
cp.setLayout(null);
c.setBounds(100,50,100,30);
cp.add(c);
cp.add(txt1);
cp.add(txt2);
this.setTitle("转换器");
this.setBounds(100,100,600,400);
this.setVisible(true);
this.setDefaultCloseOperation(2);
this.setResizable(false);
//事件相应
ComboBoxtry a1 = new ComboBoxtry();
Textry a2 = new Textry();
txt1.addActionListener(a2);
c.addItemListener(a1);
txt1.addKeyListener(this);
//转换类初始化
tra = new Translate();
}
class ComboBoxtry implements ItemListener{
public void itemStateChanged(ItemEvent e){
Type = e.getItem().toString();//告诉时时键盘监控方法当前的进制
tra.setType(e.getItem().toString());
txt2.setText(tra.getOutput());
}
}
class Textry implements ActionListener{//文本框事件响应
public void actionPerformed(ActionEvent e){
tra.setString(e.getActionCommand());
txt2.setText(tra.getOutput());
}
}
public static void main(String args[]){
Decimal D1 = new Decimal();
}
public void keyReleased(KeyEvent e){
}
public void keyPressed(KeyEvent e){//键盘时时监控,将不合法的字符过滤
int key = e.getKeyCode();
if(Type=="二进制"){
if(key==KeyEvent.VK_0 || key==KeyEvent.VK_1 || key==KeyEvent.VK_PERIOD//点号
|| key==KeyEvent.VK_ENTER || key==KeyEvent.VK_BACK_SPACE || key==
KeyEvent.VK_DELETE || key==KeyEvent.VK_NUMPAD0 || key==KeyEvent.VK_NUMPAD1)
txt1.setEditable(true);
else txt1.setEditable(false);
}
else if(Type=="八进制"){
if(key==KeyEvent.VK_0 || key==KeyEvent.VK_1 || key==KeyEvent.VK_2 ||
key==KeyEvent.VK_3 || key==KeyEvent.VK_4 || key==KeyEvent.VK_5 ||
key==KeyEvent.VK_6 || key==KeyEvent.VK_7 || key==KeyEvent.VK_ENTER ||
key==KeyEvent.VK_NUMPAD0 || key==KeyEvent.VK_NUMPAD1 ||
key==KeyEvent.VK_NUMPAD2 || key==KeyEvent.VK_NUMPAD3 ||
key==KeyEvent.VK_NUMPAD4 || key==KeyEvent.VK_NUMPAD5 ||
key==KeyEvent.VK_NUMPAD6 || key==KeyEvent.VK_NUMPAD7 ||
key==KeyEvent.VK_BACK_SPACE || key==KeyEvent.VK_DELETE ||
key==KeyEvent.VK_PERIOD)
txt1.setEditable(true);
else txt1.setEditable(false);
}
else if(Type=="十进制"){
if(key==KeyEvent.VK_0 || key==KeyEvent.VK_1 || key==KeyEvent.VK_2 ||
key==KeyEvent.VK_3 || key==KeyEvent.VK_4 || key==KeyEvent.VK_5 ||
key==KeyEvent.VK_6 || key==KeyEvent.VK_7 || key==KeyEvent.VK_8 ||
key==KeyEvent.VK_9 || key==KeyEvent.VK_ENTER ||
key==KeyEvent.VK_NUMPAD1 || key==KeyEvent.VK_NUMPAD2 ||
key==KeyEvent.VK_NUMPAD3 || key==KeyEvent.VK_NUMPAD4 ||
key==KeyEvent.VK_NUMPAD5 || key==KeyEvent.VK_NUMPAD6 ||
key==KeyEvent.VK_NUMPAD7 || key==KeyEvent.VK_NUMPAD8 ||
key==KeyEvent.VK_NUMPAD9 || key==KeyEvent.VK_NUMPAD0 ||
key==KeyEvent.VK_BACK_SPACE || key==KeyEvent.VK_DELETE ||
key==KeyEvent.VK_PERIOD)
txt1.setEditable(true);
else txt1.setEditable(false);
}
else if(Type=="十六进制"){
if(key==KeyEvent.VK_0 || key==KeyEvent.VK_1 || key==KeyEvent.VK_2 ||
key==KeyEvent.VK_3 || key==KeyEvent.VK_4 || key==KeyEvent.VK_5 ||
key==KeyEvent.VK_6 || key==KeyEvent.VK_7 || key==KeyEvent.VK_7 ||
key==KeyEvent.VK_8 || key==KeyEvent.VK_9 ||
key==KeyEvent.VK_NUMPAD1 || key==KeyEvent.VK_NUMPAD2 ||
key==KeyEvent.VK_NUMPAD3 || key==KeyEvent.VK_NUMPAD4 ||
key==KeyEvent.VK_NUMPAD5 || key==KeyEvent.VK_NUMPAD6 ||
key==KeyEvent.VK_NUMPAD7 || key==KeyEvent.VK_NUMPAD8 ||
key==KeyEvent.VK_NUMPAD9 || key==KeyEvent.VK_NUMPAD0 ||
key==KeyEvent.VK_A || key==KeyEvent.VK_PERIOD ||
key==KeyEvent.VK_B || key==KeyEvent.VK_C || key==KeyEvent.VK_D ||
key==KeyEvent.VK_E || key==KeyEvent.VK_F || key==KeyEvent.VK_ENTER ||
key==KeyEvent.VK_BACK_SPACE || key==KeyEvent.VK_DELETE)
txt1.setEditable(true);
else txt1.setEditable(false);
}
else if(Type=="格雷码"){
if(key==KeyEvent.VK_0 || key==KeyEvent.VK_1 ||
key==KeyEvent.VK_NUMPAD0 || key==KeyEvent.VK_NUMPAD1 ||
key==KeyEvent.VK_ENTER ||
key==KeyEvent.VK_BACK_SPACE || key==KeyEvent.VK_DELETE)
txt1.setEditable(true);
else txt1.setEditable(false);
}
}
public void keyTyped(KeyEvent e){
}
}
/**
*实现"二进制","八进制","十进制","十六进制","格雷码"之间的相互转换
**/
class Translate {
private String S1="",S2="",S3="",S4="",S5="",
Input="",
Output="",
Type="Binary";
//设置输入数据
public void setString(String Input){
this.Input = Input;
Translate();
}
//设置输入数据的类型
public void setType(String S){
if(S=="二进制") Type = "Binary";
else if(S=="八进制") Type = "Octal";
else if(S=="十进制") Type = "Decimal";
else if(S=="十六进制") Type = "Hexadecimal";
else if(S=="格雷码") Type = "Gray";
Translate();
}
//输出数据
public String getOutput(){
Output = S1+"\n"+S2+"\n"+S3+"\n"+S4+"\n"+S5;
return Output;
}
private void Translate(){
if(Type=="Binary"){
S1 = "二进制:"+ Input;
S2 = "八进制" + Binary_To_Octal(Input);
S3 = "十进制:" + Binary_To_Decimal(Input);
S4 = "十六进制:" + Binary_To_Hexadecimal(Input);
S5 = "格雷码:" + Binary_To_Gray(Input);
}
else if(Type=="Octal"){
S1 = "二进制:"+ Octal_To_Binary(Input);
S2 = "八进制" + Input;
S3 = "十进制:" + Octal_To_Decimal(Input);
S4 = "十六进制:" + Octal_To_Hexadecimal(Input);
S5 = "格雷码:" + Octal_To_Gray(Input);
}
else if(Type=="Decimal"){
S1 = "二进制:"+ Decimal_To_Binary(Input);
S2 = "八进制" + Decimal_To_Octal(Input);
S3 = "十进制:" +Input;
S4 = "十六进制:" + Decimal_To_Hexadecimal(Input);
S5 = "格雷码:" + Decimal_To_Gray(Input);
}
else if(Type=="Hexadecimal"){
S1 = "二进制:"+ Hexadecimal_To_Binary(Input);
S2 = "八进制" + Hexadecimal_To_Octal(Input);
S3 = "十进制:" + Hexadecimal_To_Decimal(Input);
S4 = "十六进制:" + Input;
S5 = "格雷码:" + Hexadecimal_To_Gray(Input);
}
else if(Type=="Gray"){
S1 = "二进制:"+ Gray_To_Binary(Input);
S2 = "八进制" + Gray_To_Octal(Input);
S3 = "十进制:" + Gray_To_Decimal(Input);
S4 = "十六进制:" + Gray_To_Hexadecimal(Input);
S5 = "格雷码:" + Input;
}
}
private String Octal_To_Gray(String Oct){
return Binary_To_Gray(Octal_To_Binary(Oct));
}
private String Decimal_To_Gray(String De){
return Binary_To_Gray(Decimal_To_Binary(De));
}
private String Hexadecimal_To_Gray(String Hex){
return Binary_To_Gray(Hexadecimal_To_Binary(Hex));
}
private String Gray_To_Octal(String Gr){
return Binary_To_Octal(Gray_To_Binary(Gr));
}
private String Gray_To_Decimal(String Gr){
return Binary_To_Decimal(Gray_To_Binary(Gr));
}
private String Gray_To_Hexadecimal(String Gr){
return Binary_To_Hexadecimal(Gray_To_Binary(Gr));
}
private String XOR (char a,char b){//异或
if(a!=b) return "1";
else return "0";
}
private String Binary_To_Gray(String Bi){
String result="";
if(Bi.isEmpty()) return "";//如果Bi是空串,则返回
//将小数点过滤
for(int i=0;i<Bi.length();i++)
if(Bi.charAt(i)=='.') return "代码中含有小数点,不能译成格雷码";
result+=Bi.substring(0,1);
for(int i=0;i<Bi.length()-1;i++){
result+=XOR(Bi.charAt(i),Bi.charAt(i+1));
}
return result;
}
private String Gray_To_Binary(String Gr){
String result="";
if(Gr.isEmpty()) return "";//如果Gr是空串,则返回
result+=Gr.substring(0,1);
for(int i=1;i<Gr.length();i++)
result+=XOR(result.charAt(result.length()-1),Gr.charAt(i));
return result;
}
private String Hexadecimal_To_Decimal(String Hex){
return Binary_To_Decimal(Hexadecimal_To_Binary(Hex));
}
private String Hexadecimal_To_Octal(String Hex){
return Binary_To_Octal(Hexadecimal_To_Binary(Hex));
}
private String Octal_To_Hexadecimal(String Oct){
return Binary_To_Hexadecimal(Octal_To_Binary(Oct));
}
private String Octal_To_Decimal(String Oct){
return Binary_To_Decimal(Octal_To_Binary(Oct));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -