JAVA 简单进制转换器

乱搞的..

JAVA作业写了个进制转换器...写出来的东西还蛮怪的

/*
 * Author:graykido
 * Coding:GBK
 * */


package Caculater;

import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class caculater extends JFrame {
    ImageIcon icon;
    JLabel label;
    //输入文本框
    JTextField text;
    //数字按钮
    JPanel numPanl;
    JButton numButton[];

    //输入和输出进制的框
    JPanel buttonPanel;

    //输出进制单选框
    JLabel outbuttonlabel;
    JPanel outbuttonPanel;
    ButtonGroup obtg;

    //输入进制单选框
    JLabel inbuttonlabel;
    JPanel inbuttonPanel;
    ButtonGroup ibtg;

    //将文本框和进制框放在一个jpanel内
    JPanel thPanel;

    //当前输入进制
    int IHex;


    caculater(String title) {
        super(title);
        //默认输入是十进制
        this.IHex = 10;
        Container ctpn = getContentPane();
        //设置布局
        GridLayout layout = new GridLayout(2, 2);
        this.setLayout(layout);

        //设置文本框
        text = new JTextField();
        text.setBorder(BorderFactory.createRaisedBevelBorder());
        text.setFont(new Font("宋体", Font.BOLD, 25));

        //设置标题图标
        this.icon = new ImageIcon("src\Caculater\go.png");
        icon.setDescription("gogogo");
        Image img = this.icon.getImage();
        this.setIconImage(img);
        this.setLocation(100, 200);
        this.setSize(1000, 600);
        //设置菜单
        JMenuBar jmb = new JMenuBar();

        JMenu edit = new JMenu("编辑");
        JMenuItem edit1 = new JMenuItem("施工中");
        edit.add(edit1);
        jmb.add(edit);

        JMenu view = new JMenu("查看");
        JMenuItem view1 = new JMenuItem("施工中");
        view.add(view1);
        jmb.add(view);

        JMenu help = new JMenu("帮助");
        JMenuItem help1 = new JMenuItem("施工中");
        help.add(help1);
        jmb.add(help);

        this.setJMenuBar(jmb);

        //图标
        ImageIcon icon1 = new ImageIcon("src/Caculater/left.gif");
        ImageIcon icon2 = new ImageIcon("src/Caculater/right.gif");

        buttonPanel = new JPanel();

        //输出进制单选框
        outbuttonPanel = new JPanel();
        obtg = new ButtonGroup();
        JLabel outL = new JLabel("输出进制", icon1, JLabel.CENTER);
        outbuttonPanel.add(outL);
        outaddRadioButton("二进制", 2);
        outaddRadioButton("八进制", 8);
        outaddRadioButton("十进制", 10);
        outaddRadioButton("十六进制", 16);

        //输入进制单选框
        inbuttonPanel = new JPanel();
        ibtg = new ButtonGroup();
        JLabel inL = new JLabel("输入进制", icon2, JLabel.CENTER);
        inbuttonPanel.add(inL);
        inaddRadioButton("二进制", 2);
        inaddRadioButton("八进制", 8);
        inaddRadioButton("十进制", 10);


        //数字按钮
        this.numPanl = new JPanel();
        this.numButton = new JButton[20];
        for (int i = 0; i < 10; i++) {
            numButton[i] = addJButton(i);
            numPanl.add(numButton[i]);
        }


        //清空文本框按钮
        JButton clr = new JButton("clr");
        clr.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                text.setText("");
            }
        });   //对于数字按钮以及清空按钮排版
        numPanl.add(clr);
        numPanl.setLayout(new GridLayout(4, 4));


        buttonPanel.setLayout(new GridLayout(2, 1));
        buttonPanel.add(outbuttonPanel);
        buttonPanel.add(inbuttonPanel);
        thPanel = new JPanel(new GridLayout(1, 2));
        thPanel.add(text);
        thPanel.add(buttonPanel);


//        ctpn.add(text);
        ctpn.add(thPanel);
//        ctpn.add(outbuttonPanel);
//        ctpn.add(inbuttonPanel);
        ctpn.add(numPanl);


        //关闭进程
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setVisible(true);
    }

    public JButton addJButton(int num) {
        JButton button = new JButton("" + num);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                try {
                    Integer.parseInt(text.getText());
                } catch (Exception e) {
                    text.setText("");
                }
                text.setText(text.getText() + num);
                validate();
            }
        });
        return button;
    }

    public void outaddRadioButton(String title, int Hex) {
        JRadioButton button = new JRadioButton(title);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                //触发进制转换
                try {
                    long num = Long.parseLong(text.getText());
                    //先将框内内容转为十进制
                    long temp = num;
                    long mut = 1;
                    long res = 0;
                    if (IHex != 10) {
                        while (temp != 0) {
                            res += (temp % 10 * mut);
                            mut *= IHex;
                            temp /= 10;
                        }
                    } else {
                        res = num;
                    }

                    num = res;
                    String ans = "";
                    while (num != 0) {
//                        ans += String.valueOf(num % Hex < 10 ? num % Hex : num % Hex - 10 + 'A');
                        ans += (char) (num % Hex < 10 ? num % Hex + '0' : num % Hex - 10 + 'A');
                        num /= Hex;

                    }
                    text.setText(new StringBuffer(ans).reverse().toString());
                } catch (NumberFormatException e) {
                    text.setText("请输入数字或检查输入数字范围是否过大");
                } catch (Exception e) {
                    text.setText("" + e);
                }

            }
        });
        obtg.add(button);
        outbuttonPanel.add(button);
    }

    public void inaddRadioButton(String title, int Hex) {
        JRadioButton button = new JRadioButton(title);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                IHex = Hex;
                for (int i = 0; i < 10; i++) {
                    numButton[i].setEnabled(true);
                }
                for (int i = Hex; i < 10; i++) {
                    numButton[i].setEnabled(false);
                }
            }
        });
        inbuttonPanel.add(button);
        ibtg.add(button);
    }


    public static void main(String[] args) {
        caculater fr = new caculater("计算器");
    }
}

一个小小的update

结果因为把IDEA突然弄崩了鼓捣了一晚上导致心态炸裂

/*
 * Author:graykido
 * Coding:GBK
 * */

package Caculater;

import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;

import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.synth.SynthEditorPaneUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class caculater extends JFrame {
    ImageIcon icon;
    JLabel label;
    //输入文本框
    JTextField text;
    //数字按钮
    JPanel numPanl;
    JButton numButton[];

    //进制和數字框
    JPanel buttonPanel;

    //进制
    JLabel inbuttonlabel;
    JPanel inbuttonPanel;
    ButtonGroup ibtg;


    //当前进制
    int IHex;


    caculater(String title) {
        super(title);
        //默认输入是十进制
        this.IHex = 10;
        Container ctpn = getContentPane();
        //设置布局
        this.setLayout(new BorderLayout());


        //设置文本框
        text = new JTextField();
        text.setBorder(BorderFactory.createRaisedBevelBorder());
        text.setFont(new Font("宋体", Font.BOLD, 25));
        ctpn.add("North", text);

        //设置标题图标
        this.icon = new ImageIcon("src\Caculater\go.png");
        icon.setDescription("gogogo");
        Image img = this.icon.getImage();
        this.setIconImage(img);
        this.setLocation(100, 200);
        this.setSize(400, 500);
        //设置菜单
        JMenuBar jmb = new JMenuBar();

        JMenu edit = new JMenu("编辑");
        JMenuItem edit1 = new JMenuItem("施工中");
        edit.add(edit1);
        jmb.add(edit);

        JMenu view = new JMenu("查看");
        JMenuItem view1 = new JMenuItem("施工中");
        view.add(view1);
        jmb.add(view);

        JMenu help = new JMenu("帮助");
        JMenuItem help1 = new JMenuItem("About Me");
        help1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                JOptionPane.showMessageDialog(null, "graykido");
            }
        });
        help.add(help1);
        jmb.add(help);

        this.setJMenuBar(jmb);

        //图标
        ImageIcon icon1 = new ImageIcon("src/Caculater/left.gif");
        ImageIcon icon2 = new ImageIcon("src/Caculater/right.gif");


        buttonPanel = new JPanel(new BorderLayout());

        //进制单选框
        inbuttonPanel = new JPanel();
        ibtg = new ButtonGroup();
        JLabel inL = new JLabel("进制", icon2, JLabel.CENTER);
        inbuttonPanel.add(inL);
        inaddRadioButton("二进制", 2);
        inaddRadioButton("八进制", 8);
        inaddRadioButton("十进制", 10);
        inaddRadioButton("十六进制", 16);
        buttonPanel.add("North", inbuttonPanel);

        //输入进制单选框
        this.numPanl = new JPanel(new GridLayout(5, 5));
        this.numButton = new JButton[20];
        for (int i = 0; i < 16; i++) {
            numButton[i] = addJButton(i);
            numPanl.add(numButton[i]);
        }

        //清空文本框按钮
        JButton clr = new JButton("clr");
        clr.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                text.setText("");
            }
        });

        JButton numadd = new JButton("+");
        numadd.setEnabled(false);
        JButton numsub = new JButton("-");
        numsub.setEnabled(false);
        JButton nummul = new JButton("*");
        nummul.setEnabled(false);
        JButton numdiv = new JButton("/");
        numdiv.setEnabled(false);
        JButton numeql = new JButton("=");
        numeql.setEnabled(false);
        numPanl.add(clr);
        numPanl.add(numdiv);
        numPanl.add(nummul);
        numPanl.add(numsub);
        numPanl.add(numadd);
        numPanl.add(numeql);

        buttonPanel.setPreferredSize(new Dimension(200, 200));
        buttonPanel.add("Center", this.numPanl);
        ctpn.add("Center", buttonPanel);

        //关闭进程
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setVisible(true);
    }

    public JButton addJButton(int num) {
        JButton button;
        if (num >= 10) {
            button = new JButton("" + (char) ((byte) 'A' + num - 10));
        } else {
            button = new JButton("" + num);
        }
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                text.setText(text.getText() + button.getText());
                validate();
            }
        });
        return button;
    }

    public void inaddRadioButton(String title, int Hex) {
        JRadioButton button = new JRadioButton(title);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                try {
                    String Txt = text.getText();
                    long temp = 0;
                    long mut = 1;
                    long res = 0;
                    for (int i = Txt.length() - 1; i >= 0; i--) {
                        if (Character.isUpperCase(Txt.charAt(i))) {
                            temp += ((byte) Txt.charAt(i) - (byte) 'A' + 10) * mut;
                        } else {
                            temp += ((byte) (Txt.charAt(i)) - (byte) ('0')) * mut;
                        }
                        mut *= IHex;
                    }
                    res = temp;
                    String ans = "";
                    while (res != 0) {
//                        ans += String.valueOf(res % Hex < 10 ? res % Hex : res % Hex - 10 + 'A');
                        ans += (char) (res % Hex < 10 ? res % Hex + '0' : res % Hex - 10 + 'A');
                        res /= Hex;

                    }
                    text.setText(new StringBuffer(ans).reverse().toString());
                    IHex = Hex;
                    for (int i = 0; i < 16; i++) {
                        numButton[i].setEnabled(true);
                    }
                    for (int i = Hex; i < 16; i++) {
                        numButton[i].setEnabled(false);
                    }
                } catch (NumberFormatException e) {
                    text.setText("请输入数字或检查输入数字范围是否过大");
                } catch (Exception e) {
                    text.setText("" + e);
                }
            }
        });
        inbuttonPanel.add(button);
        ibtg.add(button);
    }


    public static void main(String[] args) {
        caculater fr = new caculater("计算器");
    }
}

原文地址:https://www.cnblogs.com/graytido/p/12976025.html