用java语言实现各种进制转换(二进制,八进制,十进制,十六进制互转,主要使用Java Swing技术)
用java语言实现各种进制转换(二进制,八进制,十进制,十六进制互转,主要使用Java Swing技术)
1、原题
先从键盘输入一个十六进制数,再将其转化为十进制数,然后输出。若输入的不是一个有效的十六进制数,则抛出异常。
2、分析
原题是java老师前几天布置的一个课后作业,因为现在还正在学习java控制台下的输入输出操作,所以按原题交作业很简单。自己就自作主张,改了一下。改用GUI可视化实现,并且要能实现2进制数,8进制数,10进制数,16进制数之间的互相转换。具体实现下面都有很详细的介绍。
3、UML图

4、具体实现代码(附注释:共6个)
(1)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */public class MainClass { // 用做测试public static void main(String[] args) {// TODO Auto-generated method stub WindowNumber win = new WindowNumber(); win.setTitle("简单进制转换器");}}
(2)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */import java.awt.FlowLayout;import javax.swing.Box;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;public class WindowNumber extends JFrame {Box baseBox,boxV1,boxV2; // boxV1,boxV2为两个列式盒式容器,baseBox盛放前两者。此三者用于布局JTextField enterTwo,enterEight,enterTen,enterSixteen; // 4个可编辑文本区域,依次用做输入2进制数,8进制数,10进制数,16进制数// 监视器,分别用于监听各进制(2,8,10,16)进制PoliceListen2 listener2;PoliceListen8 listener8;PoliceListen10 listener10;PoliceListen16 listener16;public WindowNumber(){ // 构造函数,初始化setLayout(new FlowLayout());init();setBounds(100,100,600,300);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}void init(){enterTwo = new JTextField(16);enterEight = new JTextField(16);enterTen = new JTextField(16);enterSixteen = new JTextField(16);// 布局列式盒式容器boxV1boxV1 = Box.createVerticalBox();boxV1.add(new JLabel("2进制数:"));boxV1.add(Box.createVerticalStrut(15));boxV1.add(new JLabel("8进制数:"));boxV1.add(Box.createVerticalStrut(15));boxV1.add(new JLabel("10进制数:"));boxV1.add(Box.createVerticalStrut(15));boxV1.add(new JLabel("16进制数:"));// 布局列式盒式容器boxV2boxV2 = Box.createVerticalBox();boxV2.add(enterTwo);boxV2.add(Box.createVerticalStrut(15));boxV2.add(enterEight);boxV2.add(Box.createVerticalStrut(15));boxV2.add(enterTen);boxV2.add(Box.createVerticalStrut(15));boxV2.add(enterSixteen);// 盛放上述两容器baseBox = Box.createHorizontalBox();baseBox.add(boxV1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(boxV2);add(baseBox);// 监视2进制数是否输入listener2 = new PoliceListen2();listener2.setJTextField(enterEight,enterTen,enterSixteen);enterTwo.addActionListener(listener2);// 监视8进制数是否输入listener8 = new PoliceListen8();listener8.setJTextField(enterTwo,enterTen,enterSixteen);enterEight.addActionListener(listener8);// 监视10进制数是否输入listener10 = new PoliceListen10();listener10.setJTextField(enterTwo,enterEight,enterSixteen);enterTen.addActionListener(listener10);// 监视16进制数是否输入listener16 = new PoliceListen16();listener16.setJTextField(enterTwo,enterEight,enterTen);enterSixteen.addActionListener(listener16);}}
(3)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class PoliceListen2 implements ActionListener {JTextField enterEight, enterTen, enterSixteen; // 8进制,10进制,16进制@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stublong input = 0;String num8 = null;String num10 = null;String num16 = null;JTextField textSource = (JTextField)e.getSource();String str = textSource.getText();// 判断输入,并进行各进制间的转换if(!str.isEmpty()){try{ input = Long.parseLong(str,2);num8 = Long.toOctalString(input);num10 = Long.toString(input);num16 = Long.toHexString(input);enterEight.setText(num8);enterTen.setText(num10);enterSixteen.setText(num16);}catch(Exception ee){textSource.setText("请输入格式正确的2进制数");}}}public void setJTextField(JTextField enterEight, JTextField enterTen,JTextField enterSixteen) { // 初始化// TODO Auto-generated method stubthis.enterEight = enterEight;this.enterTen = enterTen;this.enterSixteen = enterSixteen;}}
(4)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class PoliceListen8 implements ActionListener {JTextField enterTwo, enterTen, enterSixteen; //2进制,10进制,16进制@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stublong input = 0;String num2 = null;String num10 = null;String num16 = null;JTextField textSource = (JTextField)e.getSource();String str = textSource.getText();// 判断输入,并进行各进制间的转换if(!str.isEmpty()){try{input = Long.parseLong(str,8);num2 = Long.toBinaryString(input);num10 = Long.toString(input);num16 = Long.toHexString(input);enterTwo.setText(num2);enterTen.setText(num10);enterSixteen.setText(num16);}catch(Exception ee){textSource.setText("请输入格式正确的8进制数");}}}public void setJTextField(JTextField enterTwo, JTextField enterTen,JTextField enterSixteen) { // 初始化// TODO Auto-generated method stubthis.enterTwo = enterTwo;this.enterTen = enterTen;this.enterSixteen = enterSixteen;}}
(5)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class PoliceListen10 implements ActionListener {JTextField enterTwo, enterEight, enterSixteen; //2进制,8进制,16进制@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stublong input = 0;String num2 = null;String num8 = null;String num16 = null;JTextField textSource = (JTextField)e.getSource();String str = textSource.getText();// 判断输入,并进行各进制间的转换if(!str.isEmpty()){try{input = Long.parseLong(str,10);num2 = Long.toBinaryString(input);num8 = Long.toOctalString(input);num16 = Long.toHexString(input);enterTwo.setText(num2);enterEight.setText(num8);enterSixteen.setText(num16);}catch(Exception ee){textSource.setText("请输入格式正确的10进制数");}}}public void setJTextField(JTextField enterTwo, JTextField enterEight,JTextField enterSixteen) { // 初始化// TODO Auto-generated method stubthis.enterTwo = enterTwo;this.enterEight = enterEight;this.enterSixteen = enterSixteen;}}
(6)
package ConvertNumber;/** * @Author Kun Sun * @Date 2013-10-26 * @At XUST * @All Copyright by Kun Sun * */import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JTextField;public class PoliceListen16 implements ActionListener {JTextField enterTwo, enterEight, enterTen; //2进制,8进制,10进制@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stublong input = 0;String num2 = null;String num8 = null;String num10 = null;JTextField textSource = (JTextField)e.getSource();String str = textSource.getText();// 判断输入,并进行各进制间的转换if(!str.isEmpty()){try{input = Long.parseLong(str,16);num2 = Long.toBinaryString(input);num8 = Long.toOctalString(input);num10 = Long.toString(input);enterTwo.setText(num2);enterEight.setText(num8);enterTen.setText(num10);}catch(Exception ee){textSource.setText("请输入格式正确的16进制数");}}}public void setJTextField(JTextField enterTwo, JTextField enterEight,JTextField enterTen) { // 初始化// TODO Auto-generated method stubthis.enterTwo = enterTwo;this.enterEight = enterEight;this.enterTen = enterTen;}}
(1)初始状态

(2)在16进制数处输入1a,并按回车键

(3)在16进制数处输入1w,并按回车键

(4)在16进制数处输入-1a,并按回车键

(5)测试其余进制数结果类似上述
6、把上述java代码打包成exe可执行文件
关于如何打包,读者可以看一下这篇博客《手把手教你如何把java代码,打包成jar文件以及转换为exe可执行文件》,链接如下:http://blog.csdn.net/u010043538/article/details/13167099
7、备注
如果您对更好的想法或建议,恳请指出,不胜感激。