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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/com/example/javafx/javafx_example.fxml b/src/main/resources/com/example/javafx/javafx_example.fxml
index d9d5ab0446a1f88abb7be1cdccccaa0d7045d678..d4593f16ec60a1df64cdd524d9a87390f984487e 100644
--- a/src/main/resources/com/example/javafx/javafx_example.fxml
+++ b/src/main/resources/com/example/javafx/javafx_example.fxml
@@ -12,7 +12,7 @@
-
+
diff --git a/src/main/resources/com/example/javafx/styles.css b/src/main/resources/com/example/javafx/styles.css
new file mode 100644
index 0000000000000000000000000000000000000000..36c52667f5c80e5936b846c3a04a5deb6a93c9d0
--- /dev/null
+++ b/src/main/resources/com/example/javafx/styles.css
@@ -0,0 +1,75 @@
+.root {
+ -fx-background-color: linear-gradient(to bottom right, #2c3e50, #4ca1af);
+ -fx-font-family: 'Segoe UI', Arial, sans-serif;
+}
+
+.display-label {
+ -fx-background-color: rgba(255, 255, 255, 0.1);
+ -fx-background-radius: 10;
+ -fx-padding: 20;
+ -fx-font-size: 32px;
+ -fx-font-weight: bold;
+ -fx-text-fill: white;
+ -fx-alignment: center-right;
+ -fx-min-width: 340px;
+ -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 10, 0, 0, 5);
+}
+
+.button {
+ -fx-font-size: 20px;
+ -fx-font-weight: bold;
+ -fx-min-width: 70px;
+ -fx-min-height: 70px;
+ -fx-background-radius: 35;
+ -fx-cursor: hand;
+ -fx-border-radius: 35;
+ -fx-border-width: 0;
+ -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.2), 5, 0, 0, 2);
+}
+
+.button:hover {
+ -fx-scale-x: 1.05;
+ -fx-scale-y: 1.05;
+}
+
+.button:pressed {
+ -fx-scale-x: 0.95;
+ -fx-scale-y: 0.95;
+}
+
+.number-button {
+ -fx-background-color: rgba(255, 255, 255, 0.9);
+ -fx-text-fill: #2c3e50;
+}
+
+.number-button:hover {
+ -fx-background-color: white;
+}
+
+.operation-button {
+ -fx-background-color: #3498db;
+ -fx-text-fill: white;
+}
+
+.operation-button:hover {
+ -fx-background-color: #2980b9;
+}
+
+.clear-button {
+ -fx-background-color: #e74c3c;
+ -fx-text-fill: white;
+}
+
+.clear-button:hover {
+ -fx-background-color: #c0392b;
+}
+
+.equals-button {
+ -fx-background-color: #2ecc71;
+ -fx-text-fill: white;
+ -fx-min-height: 150px;
+}
+
+.equals-button:hover {
+ -fx-background-color: #27ae60;
+}
\ No newline at end of file