java进制转换工具(图形界面版)

java进制转换工具(图形界面版)

本程序提供1-36进制的int数据转换。

javaSwing开发。

package asd;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

//进制转换工具
@SuppressWarnings("serial")
public class RadixChangeToolUI extends JFrame {

	public RadixChangeToolUI() {
		
	}
	
	public void init() {
		setContenpane();
		actionListen();
        mainFrame();
        
	}
	
	//图形化界面函数
	public void mainFrame() {
		//设置窗口的参数
        setBounds(500,50,530,300);
        //禁用重新调整窗口大小的功能
        setResizable(false);
        //关闭窗口的右上角的叉的同时关闭程序
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //设置窗口上当前程序的名字
        setTitle("进制转换工具V1.01.01.008");
        //清除默认的布局管理器
        getContentPane().setLayout(null);
        //设置窗口显示
        setVisible(true);
	}
	
	//控件
	JTextField jt1, jt2, jt3, answer_text;
	JLabel jl1, jl2, jl3, answer, help, tips;
	JButton button;
	//控件集合,方便修改字体等
	ArrayList<JComponent> list_conponent = new ArrayList<>();
	
	//放置控件
	public void setContenpane() {
		
		//文本输入框
		jt1 = new JTextField();
		jt2 = new JTextField();
		jt3 = new JTextField();
		answer_text = new JTextField();
		
		jt1.setBounds(120, 30, 120, 40);
		jt2.setBounds(120, 100, 120, 40);
		jt3.setBounds(120, 170, 120, 40);
		answer_text.setBounds(300, 170, 200, 40);
		
		list_conponent.add(jt1);
		list_conponent.add(jt2);
		list_conponent.add(jt3);
		list_conponent.add(answer_text);
		
		getContentPane().add(jt1);
		getContentPane().add(jt2);
		getContentPane().add(jt3);
		getContentPane().add(answer_text);
		
		//标签
		jl1 = new JLabel("输入数据:");
		jl2 = new JLabel("输入进制:");
		jl3 = new JLabel("转换进制:");
		answer = new JLabel("转换结果:");
		help = new JLabel("若结果不显示则表示数据过大无法显示!");
		tips = new JLabel("本程序提供 1-36 进制互转,数据支持int(过大无效)");
		
		jl1.setBounds(20, 30, 100, 40);
		jl2.setBounds(20, 100, 100, 40);
		jl3.setBounds(20, 170, 100, 40);
		answer.setBounds(300, 120, 200, 60);
		help.setBounds(280, 30, 220, 30);
		tips.setBounds(20, 240, 350, 30);
		
		list_conponent.add(jl1);
		list_conponent.add(jl2);
		list_conponent.add(jl3);
		list_conponent.add(answer);
		//help不存入集合
		//tips不存入集合
		
		getContentPane().add(jl1);
		getContentPane().add(jl2);
		getContentPane().add(jl3);
		getContentPane().add(answer);
		getContentPane().add(help);
		getContentPane().add(tips);
		
		//按钮
		button = new JButton("转换");
		
		button.setBounds(300, 70, 80, 35);
		
		list_conponent.add(button);
		
		getContentPane().add(button);
		
		//字体
		for(JComponent jc:list_conponent) {
			jc.setFont(new Font("黑体",Font.BOLD,20));
		}
		
		
	}
	
	//事件监听函数
	public void actionListen() {
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//获取左边三个文本输入框内容
				String a = jt1.getText();
				int b = Integer.parseInt(jt2.getText());
				int c = Integer.parseInt(jt3.getText());
				
				
	            //判断文本输入框内容是否合法(第一个)
	            char[] chars = a.toCharArray();
	            int len = chars.length;
	            for (int i = 0; i < len; i++) {
	                if(chars[i] < 48 || chars[i] > 57){
	                    if(chars[i] < 65 || chars[i] > 90){
	                        //首个位置可以是符号位,但是只能是 '-' '+'
	                        if(i == 0){
	                            if(chars[0] != '-' && chars[0] != '+'){
	                            	answer.setText("输入数据有误");
	                            	answer_text.setText("NULL");
	                            	return;
	                            }
	                        }else {
	                        	answer.setText("输入数据有误");
	                        	answer_text.setText("NULL");
                            	return;
	                        }
	                    }
	                }
	            }
	            
	            
	            
	            //需要判断一下所给类型是否合法,判断输入数据中的最大字符。
	            //第二个文本输入框与第三个文本输入框的进制是否合法
	            int maxChar = 1;
	            
	            for (char t : chars) {
	                //ASCII转换,本来分别是 -48 -55,但是因为是进制类型故需要加一
	                //(例:最大字符为 '0' 时,最小为 '1' 进制;
	                // 最大字符为 '9' 时,最小为 '10' 进制;
	                // 最大字符为 'F' 时,最小为 '16'进制)
	                if(t < 57){
	                    maxChar = Math.max(maxChar, t - 47);
	                }else{
	                    maxChar = Math.max(maxChar, t - 54);
	                }

	            }
	            
	            if(b < 1 || b > 36 || maxChar > b || c < 1 || c >36) {
	            	answer.setText("输入进制有误");
	            	answer_text.setText("NULL");
                	return;
	            }
	            
	            //转换结果
	            int model_num;
	            String sum;
	            if(b != c){
	                //将其他进制数据转换为10进制
	            	model_num = Integer.parseInt(a, b);
	                //将10进制数据转换为其他进制                       转换为大写字母
	                sum = Integer.toString(model_num, c).toUpperCase(Locale.ROOT);
	                answer.setText("转换结果:");
	                answer_text.setText(sum);
                	return;
	            }else{
	            	//原进制与所需进制相同无需转换
	            	answer.setText("转换结果:");
	            	answer_text.setText(a);
	            	return;
	            }

			}
		});
	}
	
	//主函数
	public static void main(String[] args) {
		new RadixChangeToolUI().init();
	}
	
	
	
}

jdk8

无论输入是否合法,一定返回结果。

上一篇:遗传算法实例分析(2)车间调度问题


下一篇:【JavaScript】Leetcode每日一题-最大整除子集