diff --git a/system.java b/system.java new file mode 100644 index 0000000..ef3b330 --- /dev/null +++ b/system.java @@ -0,0 +1,110 @@ + package java6201.lesson03; + + import javafx.application.Application; + import javafx.geometry.Insets; + import javafx.geometry.Pos; + import javafx.scene.Scene; + import javafx.scene.control.Alert; + import javafx.scene.control.Alert.AlertType; + import javafx.scene.control.Button; + import javafx.scene.control.Label; + import javafx.scene.control.TextField; + import javafx.scene.layout.GridPane; + import javafx.stage.Stage; + + public class system extends Application { + + private TextField inputTextField; + private TextField sourceBaseTextField; + private TextField targetBaseTextField; + private Label resultLabel; + + @Override + public void start(Stage primaryStage) { + primaryStage.setTitle("Base Converter"); + + GridPane grid = new GridPane(); + grid.setAlignment(Pos.CENTER); + grid.setPadding(new Insets(10)); + grid.setVgap(8); + grid.setHgap(10); + + Label inputLabel = new Label("Input Number:"); + inputTextField = new TextField(); + + Label sourceBaseLabel = new Label("Source Base (2-16):"); + sourceBaseTextField = new TextField(); + sourceBaseTextField.setText("10"); // Default to decimal + + Label targetBaseLabel = new Label("Target Base (2-16):"); + targetBaseTextField = new TextField(); + targetBaseTextField.setText("2"); // Default to binary + + Button convertButton = new Button("Convert"); + resultLabel = new Label(); + + grid.add(inputLabel, 0, 0); + grid.add(inputTextField, 1, 0); + grid.add(sourceBaseLabel, 0, 1); + grid.add(sourceBaseTextField, 1, 1); + grid.add(targetBaseLabel, 0, 2); + grid.add(targetBaseTextField, 1, 2); + grid.add(convertButton, 1, 3); + grid.add(resultLabel, 1, 4); + + convertButton.setOnAction(event -> convert()); + + Scene scene = new Scene(grid, 300, 200); + primaryStage.setScene(scene); + primaryStage.show(); + } + + private void convert() { + String input = inputTextField.getText(); + String sourceBaseStr = sourceBaseTextField.getText(); + String targetBaseStr = targetBaseTextField.getText(); + + try { + int sourceBase = Integer.parseInt(sourceBaseStr); + int targetBase = Integer.parseInt(targetBaseStr); + + if (sourceBase < 2 || sourceBase > 16 || targetBase < 2 || targetBase > 16) { + throw new IllegalArgumentException("Base must be between 2 and 16."); + } + + long number = Long.parseLong(input, sourceBase); + String result = convertToBase(number, targetBase); + + resultLabel.setText("Result: " + result); + } catch (NumberFormatException e) { + showAlert(AlertType.ERROR, "Invalid Input", "Number format error: " + e.getMessage()); + } catch (IllegalArgumentException e) { + showAlert(AlertType.ERROR, "Invalid Input", "Illegal argument: " + e.getMessage()); + } + } + + private String convertToBase(long number, int base) { + if (number == 0) { + return "0"; + } + StringBuilder result = new StringBuilder(); + char[] digits = "0123456789ABCDEF".toCharArray(); + while (number > 0) { + result.insert(0, digits[(int) (number % base)]); + number /= base; + } + return result.toString(); + } + + private void showAlert(AlertType alertType, String title, String content) { + Alert alert = new Alert(alertType); + alert.setTitle(title); + alert.setContentText(content); + alert.setHeaderText(null); + alert.showAndWait(); + } + + public static void main(String[] args) { + launch(args); + } + }