用java语言实现各种进制转换(二进制,八进制,十进制,十六进制互转,主要使用Java Swing技术)
先从键盘输入一个十六进制数,再将其转化为十进制数,然后输出。若输入的不是一个有效的十六进制数,则抛出异常。
原题是java老师前几天布置的一个课后作业,因为现在还正在学习java控制台下的输入输出操作,所以按原题交作业很简单。自己就自作主张,改了一下。改用GUI可视化实现,并且要能实现2进制数,8进制数,10进制数,16进制数之间的互相转换。具体实现下面都有很详细的介绍。
(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); // 布局列式盒式容器boxV1 boxV1 = 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进制数:")); // 布局列式盒式容器boxV2 boxV2 = 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进制 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub long 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 stub this.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进制 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub long 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 stub this.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进制 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub long 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 stub this.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进制 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub long 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 stub this.enterTwo = enterTwo; this.enterEight = enterEight; this.enterTen = enterTen; } }
(1)初始状态
(2)在16进制数处输入1a,并按回车键
(3)在16进制数处输入1w,并按回车键
(4)在16进制数处输入-1a,并按回车键
(5)测试其余进制数结果类似上述
关于如何打包,读者可以看一下这篇博客《手把手教你如何把java代码,打包成jar文件以及转换为exe可执行文件》,链接如下:http://blog.csdn.net/u010043538/article/details/13167099
如果您对更好的想法或建议,恳请指出,不胜感激。