⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decimal.java

📁 Java写的一个能在二进制
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 *一个在各进制之间相互转换的工具
 *新加入了与格雷码的转换
 *新加入对数字区按键的支持
 *
 *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 + -