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.
125 lines
4.4 KiB
125 lines
4.4 KiB
import javafx.application.Application;
|
|
import javafx.geometry.Insets;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.control.*;
|
|
import javafx.scene.layout.GridPane;
|
|
import javafx.stage.Stage;
|
|
|
|
public class TestController extends Application {
|
|
|
|
private TextField inputTextField;
|
|
private Label resultLabel;
|
|
private ToggleGroup sourceBaseGroup;
|
|
private ToggleGroup targetBaseGroup;
|
|
|
|
@Override
|
|
public void start(Stage primaryStage) {
|
|
// 创建组件
|
|
Label sourceBaseLabel = new Label("数值进制:");
|
|
sourceBaseGroup = new ToggleGroup();
|
|
RadioButton rb2 = new RadioButton("2进制");
|
|
RadioButton rb8 = new RadioButton("8进制");
|
|
RadioButton rb10 = new RadioButton("10进制");
|
|
RadioButton rb16 = new RadioButton("16进制");
|
|
rb10.setSelected(true); // 默认选择10进制
|
|
|
|
rb2.setToggleGroup(sourceBaseGroup);
|
|
rb8.setToggleGroup(sourceBaseGroup);
|
|
rb10.setToggleGroup(sourceBaseGroup);
|
|
rb16.setToggleGroup(sourceBaseGroup);
|
|
|
|
Label inputLabel = new Label("输入数字:");
|
|
inputTextField = new TextField();
|
|
Label targetBaseLabel = new Label("结果进制:");
|
|
targetBaseGroup = new ToggleGroup();
|
|
RadioButton rb2Result = new RadioButton("2进制");
|
|
RadioButton rb8Result = new RadioButton("8进制");
|
|
RadioButton rb10Result = new RadioButton("10进制");
|
|
RadioButton rb16Result = new RadioButton("16进制");
|
|
rb16Result.setSelected(true); // 默认选择16进制
|
|
|
|
rb2Result.setToggleGroup(targetBaseGroup);
|
|
rb8Result.setToggleGroup(targetBaseGroup);
|
|
rb10Result.setToggleGroup(targetBaseGroup);
|
|
rb16Result.setToggleGroup(targetBaseGroup);
|
|
|
|
Button convertButton = new Button("转换");
|
|
resultLabel = new Label("转换结果:");
|
|
|
|
// 设置布局
|
|
GridPane gridPane = new GridPane();
|
|
gridPane.setPadding(new Insets(10));
|
|
gridPane.setVgap(10);
|
|
gridPane.setHgap(10);
|
|
|
|
gridPane.add(sourceBaseLabel, 0, 0);
|
|
gridPane.add(rb2, 1, 0);
|
|
gridPane.add(rb8, 2, 0);
|
|
gridPane.add(rb10, 3, 0);
|
|
gridPane.add(rb16, 4, 0);
|
|
gridPane.add(inputLabel, 0, 1);
|
|
gridPane.add(inputTextField, 1, 1, 4, 1);
|
|
gridPane.add(targetBaseLabel, 0, 2);
|
|
gridPane.add(rb2Result, 1, 2);
|
|
gridPane.add(rb8Result, 2, 2);
|
|
gridPane.add(rb10Result, 3, 2);
|
|
gridPane.add(rb16Result, 4, 2);
|
|
gridPane.add(convertButton, 0, 3);
|
|
gridPane.add(resultLabel, 1, 3, 4, 1);
|
|
|
|
// 设置场景
|
|
Scene scene = new Scene(gridPane, 600, 200);
|
|
|
|
// 设置窗口
|
|
primaryStage.setTitle("进制转换工具");
|
|
primaryStage.setScene(scene);
|
|
primaryStage.show();
|
|
|
|
// 添加事件监听器
|
|
convertButton.setOnAction(event -> {
|
|
int sourceBase = getSelectedBase(sourceBaseGroup);
|
|
int targetBase = getSelectedBase(targetBaseGroup);
|
|
String inputValue = inputTextField.getText();
|
|
|
|
try {
|
|
int decimalValue = toDecimal(inputValue, sourceBase);
|
|
String result = fromDecimal(decimalValue, targetBase);
|
|
resultLabel.setText("转换结果: " + result);
|
|
} catch (NumberFormatException e) {
|
|
resultLabel.setText("输入错误,请检查输入格式!");
|
|
} catch (IllegalArgumentException e) {
|
|
resultLabel.setText(e.getMessage());
|
|
}
|
|
});
|
|
}
|
|
|
|
private int getSelectedBase(ToggleGroup group) {
|
|
RadioButton selected = (RadioButton) group.getSelectedToggle();
|
|
switch (selected.getText()) {
|
|
case "2进制":
|
|
return 2;
|
|
case "8进制":
|
|
return 8;
|
|
case "10进制":
|
|
return 10;
|
|
case "16进制":
|
|
return 16;
|
|
default:
|
|
throw new IllegalArgumentException("未选择有效进制");
|
|
}
|
|
}
|
|
|
|
// 将字符串转换为十进制
|
|
public static int toDecimal(String value, int base) {
|
|
return Integer.parseInt(value, base);
|
|
}
|
|
|
|
// 将十进制转换为指定进制
|
|
public static String fromDecimal(int value, int base) {
|
|
return Integer.toString(value, base).toUpperCase();
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
launch(args);
|
|
}
|
|
} |