diff --git a/BaseConverter.java b/BaseConverter.java index 14fe6b3..e793c7f 100644 --- a/BaseConverter.java +++ b/BaseConverter.java @@ -1,3 +1,7 @@ +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.Scanner; public class BaseConverter { @@ -55,27 +59,75 @@ public class BaseConverter { int decimalValue = toDecimal(str, sourceBase); return fromDecimal(decimalValue, targetBase); } + /** * 主方法,用于测试 */ public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); + EventQueue.invokeLater(() -> { + new BaseConverterGUI(); + }); + } + + // GUI 类 + public static class BaseConverterGUI extends JFrame { + + private JTextField inputField; + private JTextField sourceBaseField; + private JTextField targetBaseField; + private JButton convertButton; + private JLabel resultLabel; - // 获取用户输入 - System.out.print("请输入数据(例如 A1): "); - String input = scanner.nextLine().toUpperCase(); + public BaseConverterGUI() { + setTitle("进制转换器"); + setSize(400, 200); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLocationRelativeTo(null); // 居中显示 + setLayout(new GridLayout(5, 2)); - System.out.print("请输入源进制数(例如 16): "); - int sourceBase = scanner.nextInt(); + // 输入框 + inputField = new JTextField(); + add(new JLabel("输入数据(例如 A1):")); + add(inputField); - System.out.print("请输入目标进制数(例如 2): "); - int targetBase = scanner.nextInt(); + // 源进制输入框 + sourceBaseField = new JTextField(); + add(new JLabel("源进制数(例如 16):")); + add(sourceBaseField); - // 进制转换 - String result = convertBase(input, sourceBase, targetBase); + // 目标进制输入框 + targetBaseField = new JTextField(); + add(new JLabel("目标进制数(例如 2):")); + add(targetBaseField); - System.out.println("转换结果:" + result); // 输出转换结果 + // 转换按钮 + convertButton = new JButton("转换"); + add(new JLabel()); + add(convertButton); - scanner.close(); + // 结果标签 + resultLabel = new JLabel("转换结果:"); + add(new JLabel()); + add(resultLabel); + + // 添加监听器到按钮 + convertButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + String input = inputField.getText().toUpperCase(); + int sourceBase = Integer.parseInt(sourceBaseField.getText()); + int targetBase = Integer.parseInt(targetBaseField.getText()); + String result = convertBase(input, sourceBase, targetBase); + resultLabel.setText("转换结果:" + result); + } catch (Exception ex) { + JOptionPane.showMessageDialog(BaseConverterGUI.this, "输入错误,请检查后重试!", "错误", JOptionPane.ERROR_MESSAGE); + } + } + }); + + setVisible(true); + } } + } \ No newline at end of file