ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-07-02 22:33:02  阅读:533  来源: 互联网

标签:setBounds java 进制 图形界面 getContentPane add answer new


本程序提供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

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

标签:setBounds,java,进制,图形界面,getContentPane,add,answer,new
来源: https://blog.csdn.net/may10/article/details/118424194

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有