一个进制转换的swing,改了下

package test;

import java.awt.Container;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

//import javax.swing.event.DocumentEvent;

//程序放在一个文件中,只有一个类
public class Computer extends JFrame implements KeyListener, ActionListener // 需要用到文本监听器、动作监听器
{
    public static final long serialVersionUID = 1L;

    // 声明控件与变量
    private int temp; // 数值转换的中间变量

    private boolean flag = false;// 按钮标志位

    private JPanel panel; // 一个panel容器

    private JButton changeButton; // 声明转换按钮

    private JLabel[] title = new JLabel[4]; // label组

    private JTextField[] value = new JTextField[4]; // 文本框组

    // 构造

    public Computer() {
        super("Java程序设计"); // JFrame参数
        init();
    }

    private void init() {
        Container content = getContentPane(); // 容器对象声明
        content.setLayout(null); // 布局为空
        panel = new JPanel(null); // panel定义
        panel.setBounds(new Rectangle(0, 0, 300, 350));// 定义panel显示区域
        panel.setBorder(BorderFactory.createTitledBorder("进制转换器")); // panel标题

        title[0] = new JLabel("二进制");// label
        title[1] = new JLabel("八进制");
        title[2] = new JLabel("十进制");
        title[3] = new JLabel("十六进制");
        for (int i = 0; i < title.length; i++) {
            title[i].setBounds(new Rectangle(10, 20 + i * 60, 70, 35));
        }
        for (int i = 0; i < value.length; i++) {
            value[i] = new JTextField(20);
            value[i].setBounds(new Rectangle(80, 20 + i * 60, 180, 25));
            value[i].addKeyListener(this);
        }
        changeButton = new JButton("转换");// 转换纽
        changeButton.setBounds(new Rectangle(60, 260, 210, 25));
        changeButton.addActionListener(this);
        for (int i = 0; i < title.length; i++)
            // 向panel添加控件
            panel.add(title[i]);
        for (int i = 0; i < value.length; i++)
            panel.add(value[i]);
        panel.add(changeButton);
        content.add(panel); // 向content中添加panel
        setSize(300, 350); // 窗口大小
        this.setLocationRelativeTo(null); // 居中
        setResizable(false);// 禁止改变窗口大小
        setVisible(true); // 显示
    }

    public void keyTyped(KeyEvent e) {

    }

    public void keyPressed(KeyEvent e) {
        if (e.getSource() == value[0]) {
            clearOthers(0);
        } else if (e.getSource() == value[1]) {
            clearOthers(1);
        } else if (e.getSource() == value[2]) {
            clearOthers(2);
        } else if (e.getSource() == value[3]) {
            clearOthers(3);
        }
    }

    public void keyReleased(KeyEvent e) {
        if (value[0].getText().length() != 0) { // 由于四个文本框监听后动作不同,所以要分别识别出每个文本框的改变
            try {
                temp = Integer.parseInt(value[0].getText(), 2); // 二转十函数
                clearOthers(0);
                flag = true;
            } catch (NumberFormatException ee) {
                JOptionPane.showMessageDialog(null, "输入数据不合法", "信息提示",
                        JOptionPane.PLAIN_MESSAGE);
                clearAll();
            }
        } else if (value[1].getText().length() != 0) {
            try {
                temp = Integer.parseInt(value[1].getText(), 8);// 八转十函数
                clearOthers(1);
                flag = true;
            } catch (NumberFormatException ee) {
                JOptionPane.showMessageDialog(null, "输入数据不合法", "信息提示",
                        JOptionPane.PLAIN_MESSAGE);
                clearAll();
            }
        } else if (value[2].getText().length() != 0) {
            try {

                temp = Integer.parseInt(value[2].getText());// 字符串转int函数
                clearOthers(2);
                flag = true;
            } catch (NumberFormatException ee) {
                JOptionPane.showMessageDialog(null, "输入数据不合法", "信息提示",
                        JOptionPane.PLAIN_MESSAGE);
                clearAll();
            }
        } else if (value[3].getText().length() != 0) {
            try {
                temp = Integer.parseInt(value[3].getText(),16);// 十六转十函数
                clearOthers(3);
                flag = true;
            } catch (NumberFormatException ee) {
                JOptionPane.showMessageDialog(null, "输入数据不合法", "信息提示",
                        JOptionPane.PLAIN_MESSAGE);
                clearAll();
            }
        }

    }

    private void clearAll() {
        for (int i = 0; i < value.length; i++) {
            value[i].setText("");
        }
    }

    private void clearOthers(int t) {
        for (int i = 0; i < value.length; i++) {
            if (i != t) {
                value[i].setText("");
            }
        }
    }

    public void actionPerformed(ActionEvent e)// 按钮监听动作后实现
    {
        if (e.getSource() == changeButton) {
            if (flag) {
                value[0].setText(Integer.toBinaryString(temp)); // 十转二函数
                value[1].setText(Integer.toOctalString(temp));// 十转八函数
                value[2].setText(Integer.toString(temp));// int转字符串函数
                value[3].setText(Integer.toHexString(temp)); // 十转十六函数
                flag = false;
                changeButton.setText("清空");
            } else if (!flag)// 清空
            {
                for (int i = 0; i < 4; i++)
                    value[i].setText("");
                temp = 0;
                changeButton.setText("转换");
            }
        }

    }

    public static void main(String[] args) {
        Computer cr = new Computer();// 构造后,产生窗口
        cr.addWindowListener(new WindowAdapter()// 关闭按钮响应
                {
                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                });
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值