You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
test/BaseConverterGUI.java

97 lines
3.5 KiB

package com.example.baseconverter;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class BaseConverterGUI extends JFrame {
private JPanel contentPane;
private JTextField sourceBaseField;
private JTextField sourceNumberField;
private JTextField targetBaseField;
private JButton convertButton;
private JLabel resultLabel;
public BaseConverterGUI() {
setTitle("Base Converter");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 150);
contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel sourceBaseLabel = new JLabel("原始进制 (2-16):");
sourceBaseLabel.setBounds(10, 11, 85, 14);
contentPane.add(sourceBaseLabel);
sourceBaseField = new JTextField();
sourceBaseField.setBounds(99, 8, 86, 20);
contentPane.add(sourceBaseField);
sourceBaseField.setColumns(10);
JLabel sourceNumberLabel = new JLabel("原始数:");
sourceNumberLabel.setBounds(10, 42, 85, 14);
contentPane.add(sourceNumberLabel);
sourceNumberField = new JTextField();
sourceNumberField.setBounds(99, 39, 86, 20);
contentPane.add(sourceNumberField);
sourceNumberField.setColumns(10);
JLabel targetBaseLabel = new JLabel("目标进制 (2-16):");
targetBaseLabel.setBounds(10, 73, 85, 14);
contentPane.add(targetBaseLabel);
targetBaseField = new JTextField();
targetBaseField.setBounds(99, 70, 86, 20);
contentPane.add(targetBaseField);
targetBaseField.setColumns(10);
convertButton = new JButton("转换");
convertButton.setBounds(199, 110, 89, 23);
contentPane.add(convertButton);
resultLabel = new JLabel("");
resultLabel.setBounds(299, 70, 130, 14);
contentPane.add(resultLabel);
convertButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
int sourceBase = Integer.parseInt(sourceBaseField.getText());
String sourceNumber = sourceNumberField.getText();
int targetBase = Integer.parseInt(targetBaseField.getText());
if (sourceBase < 2 || sourceBase > 16 || targetBase < 2 || targetBase > 16) {
resultLabel.setText("进制必须在2到16之间");
return;
}
int decimalValue = BaseConverter.toDecimal(sourceNumber, sourceBase);
String targetNumber = BaseConverter.fromDecimal(decimalValue, targetBase);
resultLabel.setText("转换后的数是: " + targetNumber);
} catch (NumberFormatException ex) {
resultLabel.setText("请输入有效的数字");
}
}
});
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BaseConverterGUI frame = new BaseConverterGUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}