diff --git a/pom.xml b/pom.xml index 5ea5ae44fa9b0306f9e788d70a171dafa7d2638d..9ed0efe6cc09908d49275f8453cecf083c603bd8 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ javafx-maven-plugin ${javafx.maven.plugin.version} - JavaFXExample + com.example.javafx.calculator.Main app app app @@ -55,6 +55,56 @@ com.example.javafx.JavaFXFXMLExample + + + run-swing + + SwingExample + + + + run-awt + + AWTExample + + + + run-javafx + + JavaFXExample + + --module-path + ${user.home}/.m2/repository/org/openjfx/javafx-controls/${javafx.version} + --add-modules + javafx.controls + + + + + run-javafx-fxml + + com.example.javafx.JavaFXFXMLExample + + --module-path + ${user.home}/.m2/repository/org/openjfx + --add-modules + javafx.controls,javafx.fxml + + + + + run-calculator + + com.example.javafx.calculator.Main + + --module-path + ${user.home}/.m2/repository/org/openjfx + --add-modules + javafx.controls,javafx.fxml + + + + diff --git a/src/main/java/AWTExample.java b/src/main/java/AWTExample.java index 61fcfe2260ce4a3dde01553c989efc023e56a6c0..78ae79e9ee5bde89df3afc889252592cf3b6d9be 100644 --- a/src/main/java/AWTExample.java +++ b/src/main/java/AWTExample.java @@ -16,6 +16,10 @@ public class AWTExample { TextArea displayArea = new TextArea(5, 30); displayArea.setEditable(false); + // 添加滚动条 + ScrollPane scrollPane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); + scrollPane.add(displayArea); + // 创建按钮 Button button = new Button("显示内容"); @@ -31,12 +35,15 @@ public class AWTExample { // 添加组件到窗口 f.add(topPanel, BorderLayout.NORTH); - f.add(displayArea, BorderLayout.CENTER); + f.add(scrollPane, BorderLayout.CENTER); + + // 设置窗口居中显示 + f.setLocationRelativeTo(null); // 按钮点击事件 button.addActionListener(e -> { String selected = choice.getSelectedItem(); - String content = ""; + String content; switch(selected) { case "选项1:Java": diff --git a/src/main/java/JavaFXExample.java b/src/main/java/JavaFXExample.java index 2d0d40db10504ca36d0257dd2a44ea3b8f8dc7d7..ac5f4a2e0f65ad6cdf918b01e977a2f1b8842c33 100644 --- a/src/main/java/JavaFXExample.java +++ b/src/main/java/JavaFXExample.java @@ -27,12 +27,16 @@ public class JavaFXExample extends Application { // 设置主布局 VBox root = new VBox(10); + root.setPadding(new javafx.geometry.Insets(10)); root.getChildren().addAll(topPanel, displayArea); + // 设置TextArea自动扩展 + VBox.setVgrow(displayArea, Priority.ALWAYS); + // 按钮点击事件 button.setOnAction(e -> { String selected = comboBox.getValue(); - String content = ""; + String content; switch(selected) { case "选项1:Java": @@ -66,6 +70,8 @@ public class JavaFXExample extends Application { Scene scene = new Scene(root, 400, 300); stage.setScene(scene); stage.setTitle("JavaFX 选择演示"); + stage.setResizable(true); + stage.centerOnScreen(); stage.show(); } diff --git a/src/main/java/SwingExample.java b/src/main/java/SwingExample.java index 857903923194fb30812b7eca022c7e472fc5081b..a8a67c0305dbb64f1702e15b16aa5cad224421bd 100644 --- a/src/main/java/SwingExample.java +++ b/src/main/java/SwingExample.java @@ -38,10 +38,13 @@ public class SwingExample { f.add(topPanel, BorderLayout.NORTH); f.add(scrollPane, BorderLayout.CENTER); + // 设置窗口居中显示 + f.setLocationRelativeTo(null); + // 按钮点击事件 button.addActionListener(e -> { String selected = (String) comboBox.getSelectedItem(); - String content = ""; + String content; switch(selected) { case "选项1:Java": diff --git a/src/main/java/com/example/calculator/Main.java b/src/main/java/com/example/calculator/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..3116951fe9adc0e4a07f99d331d431313aa2fb9f --- /dev/null +++ b/src/main/java/com/example/calculator/Main.java @@ -0,0 +1,22 @@ +package com.example.calculator; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class Main extends Application { + @Override + public void start(Stage stage) throws Exception { + Parent root = FXMLLoader.load(getClass().getResource("Calculator.fxml")); + stage.setTitle("简易计算器 - JavaFX"); + stage.setScene(new Scene(root, 400, 500)); + stage.setResizable(false); + stage.show(); + } + + public static void main(String[] args) { + launch(args); + } +} diff --git a/src/main/java/com/example/javafx/JavaFXController.java b/src/main/java/com/example/javafx/JavaFXController.java index 80f493f5e397209c001a66d78253b88c5d938cfc..5ffeb01cd44728d1a1e09ce0b0f41f44ce1e43c5 100644 --- a/src/main/java/com/example/javafx/JavaFXController.java +++ b/src/main/java/com/example/javafx/JavaFXController.java @@ -21,7 +21,7 @@ public class JavaFXController { @FXML protected void handleButtonAction() { String selected = comboBox.getValue(); - String content = ""; + String content; switch(selected) { case "选项1:Java": diff --git a/src/main/java/com/example/javafx/JavaFXFXMLExample.java b/src/main/java/com/example/javafx/JavaFXFXMLExample.java index 214ad937da5c2ed355c86e20ef20128fde128291..6ff68179ac4fe4b318ce90f764a330e2af390a28 100644 --- a/src/main/java/com/example/javafx/JavaFXFXMLExample.java +++ b/src/main/java/com/example/javafx/JavaFXFXMLExample.java @@ -14,8 +14,11 @@ public class JavaFXFXMLExample extends Application { // 设置场景和舞台 Scene scene = new Scene(root, 400, 300); + scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm()); stage.setScene(scene); stage.setTitle("JavaFX FXML 选择演示"); + stage.setResizable(true); + stage.centerOnScreen(); stage.show(); } diff --git a/src/main/java/com/example/javafx/calculator/CalculatorController.java b/src/main/java/com/example/javafx/calculator/CalculatorController.java new file mode 100644 index 0000000000000000000000000000000000000000..45811aa42c737100b8f9f3bd56784a5eda5fe370 --- /dev/null +++ b/src/main/java/com/example/javafx/calculator/CalculatorController.java @@ -0,0 +1,110 @@ +package com.example.javafx.calculator; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.event.ActionEvent; + +public class CalculatorController { + @FXML private Label display; + private String currentNumber = ""; + private String firstNumber = ""; + private String operation = ""; + private boolean startNewNumber = true; + + @FXML + private void initialize() { + display.setText("0"); + } + + @FXML + private void handleNumber(ActionEvent event) { + if (startNewNumber) { + currentNumber = ""; + startNewNumber = false; + } + String value = ((Button) event.getSource()).getText(); + currentNumber += value; + display.setText(currentNumber); + } + + @FXML + private void handleOperation(ActionEvent event) { + if (!currentNumber.isEmpty()) { + if (firstNumber.isEmpty()) { + firstNumber = currentNumber; + } else if (!operation.isEmpty()) { + calculateResult(); + firstNumber = display.getText(); + } + operation = ((Button) event.getSource()).getText(); + startNewNumber = true; + } + } + + @FXML + private void handleEquals() { + if (!firstNumber.isEmpty() && !operation.isEmpty() && !currentNumber.isEmpty()) { + calculateResult(); + operation = ""; + firstNumber = ""; + startNewNumber = true; + } + } + + @FXML + private void handleClear() { + currentNumber = ""; + firstNumber = ""; + operation = ""; + display.setText("0"); + startNewNumber = true; + } + + @FXML + private void handleDecimal() { + if (startNewNumber) { + currentNumber = "0"; + startNewNumber = false; + } + if (!currentNumber.contains(".")) { + currentNumber += "."; + display.setText(currentNumber); + } + } + + @FXML + private void handleBackspace() { + if (!currentNumber.isEmpty() && currentNumber.length() > 1) { + currentNumber = currentNumber.substring(0, currentNumber.length() - 1); + display.setText(currentNumber); + } else { + currentNumber = ""; + display.setText("0"); + startNewNumber = true; + } + } + + private void calculateResult() { + double num1 = Double.parseDouble(firstNumber); + double num2 = Double.parseDouble(currentNumber); + double result = 0; + + switch (operation) { + case "+": result = num1 + num2; break; + case "-": result = num1 - num2; break; + case "×": result = num1 * num2; break; + case "÷": + if (num2 != 0) result = num1 / num2; + else { display.setText("错误"); return; } + break; + } + + if (result == (int) result) { + display.setText(String.valueOf((int) result)); + } else { + display.setText(String.valueOf(result)); + } + currentNumber = display.getText(); + } +} \ No newline at end of file diff --git a/src/main/resources/com/example/javafx/Calculator.fxml b/src/main/resources/com/example/javafx/Calculator.fxml new file mode 100644 index 0000000000000000000000000000000000000000..aad897d75792dbbd052a125da214c54e0a7ed163 --- /dev/null +++ b/src/main/resources/com/example/javafx/Calculator.fxml @@ -0,0 +1,55 @@ + + + + + + + + +