import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class BaseConverterGUI extends JFrame implements ActionListener { private JTextField inputField; private JTextField sourceBaseField; private JTextField targetBaseField; private JButton convertButton; private JLabel resultLabel; public BaseConverterGUI() { setTitle("基数转换器"); setSize(400, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); // 输入框 inputField = new JTextField(10); add(new JLabel("输入数值:")); add(inputField); // 源基数输入框 sourceBaseField = new JTextField(5); add(new JLabel("源基数:")); add(sourceBaseField); // 目标基数输入框 targetBaseField = new JTextField(5); add(new JLabel("目标基数:")); add(targetBaseField); // 转换按钮 convertButton = new JButton("转换"); convertButton.addActionListener(this); add(convertButton); // 结果标签 resultLabel = new JLabel("结果:"); add(resultLabel); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == convertButton) { String numStr = inputField.getText(); int sourceBase = Integer.parseInt(sourceBaseField.getText()); int targetBase = Integer.parseInt(targetBaseField.getText()); try { String convertedNum = convertBase(numStr, sourceBase, targetBase); resultLabel.setText("转换结果: " + convertedNum + " (基数 " + targetBase + ")"); } catch (NumberFormatException ex) { JOptionPane.showMessageDialog(this, "输入无效,请检查输入。"); } } } private String convertBase(String numStr, int sourceBase, int targetBase) { int decimal = convertToDecimal(numStr, sourceBase); return convertFromDecimal(decimal, targetBase); } private int convertToDecimal(String numStr, int base) { return Integer.parseInt(numStr, base); } private String convertFromDecimal(int decimal, int base) { if (base < 2 || base > 16) { throw new IllegalArgumentException("基数必须在2到16之间"); } StringBuilder result = new StringBuilder(); boolean isNegative = decimal < 0; decimal = Math.abs(decimal); while (decimal > 0) { int remainder = decimal % base; if (remainder < 10) { result.append(remainder); } else { result.append((char) ('A' + remainder - 10)); // Convert to A-F for bases > 10 } decimal /= base; } if (result.length() == 0) { return "0"; } if (isNegative) { result.append('-'); } return result.reverse().toString(); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new BaseConverterGUI()); } }