本程序提供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
无论输入是否合法,一定返回结果。