Java GUI开发全攻略:Swing、JavaFX与AWT
Swing 界面开发
Swing 是 Java 中用于创建图形用户界面(GUI)的库。它提供了丰富的组件,如按钮、文本框、标签等。
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class SwingExample {public static void main(String[] args) {// 创建 JFrame 窗口JFrame frame = new JFrame("Swing Example");frame.setSize(300, 200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建 JPanel 面板JPanel panel = new JPanel();frame.add(panel);// 创建 JLabel 标签JLabel label = new JLabel("Enter your name:");panel.add(label);// 创建 JTextField 文本框JTextField textField = new JTextField(20);panel.add(textField);// 创建 JButton 按钮JButton button = new JButton("Submit");panel.add(button);// 添加按钮点击事件button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String name = textField.getText();JOptionPane.showMessageDialog(frame, "Hello, " + name);}});// 显示窗口frame.setVisible(true);}
}
JavaFX 界面开发
JavaFX 是 Java 的另一个 GUI 框架,提供了更现代化的界面设计和丰富的功能。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;public class JavaFXExample extends Application {@Overridepublic void start(Stage primaryStage) {// 创建 VBox 布局VBox vbox = new VBox(10);// 创建 Label 标签Label label = new Label("Enter your name:");vbox.getChildren().add(label);// 创建 TextField 文本框TextField textField = new TextField();vbox.getChildren().add(textField);// 创建 Button 按钮Button button = new Button("Submit");vbox.getChildren().add(button);// 添加按钮点击事件button.setOnAction(event -> {String name = textField.getText();System.out.println("Hello, " + name);});// 创建 Scene 场景Scene scene = new Scene(vbox, 300, 200);// 设置 Stage 标题和场景primaryStage.setTitle("JavaFX Example");primaryStage.setScene(scene);// 显示窗口primaryStage.show();}public static void main(String[] args) {launch(args);}
}
AWT 界面开发
AWT(Abstract Window Toolkit)是 Java 最早的 GUI 工具包,虽然现在较少使用,但在某些场景下仍然有用。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class AWTExample {public static void main(String[] args) {// 创建 Frame 窗口Frame frame = new Frame("AWT Example");frame.setSize(300, 200);// 创建 Panel 面板Panel panel = new Panel();frame.add(panel);// 创建 Label 标签Label label = new Label("Enter your name:");panel.add(label);// 创建 TextField 文本框TextField textField = new TextField(20);panel.add(textField);// 创建 Button 按钮Button button = new Button("Submit");panel.add(button);// 添加按钮点击事件button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String name = textField.getText();System.out.println("Hello, " + name);}});// 显示窗口frame.setVisible(true);}
}
Web 前端与 Java 后端交互
Java 后端可以通过 Servlet 或 Spring Boot 与前端进行交互,前端通常使用 HTML、CSS 和 JavaScript。
// Spring Boot 控制器示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class WebController {@GetMapping("/greet")public String greet(@RequestParam String name) {return "Hello, " + name;}
}
<!-- HTML 前端示例 -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Greeting Page</title>
</head>
<body><h1>Enter your name:</h1><input type="text" id="nameInput"><button onclick="greet()">Submit</button><p id="greeting"></p><script>function greet() {const name = document.getElementById('nameInput').value;fetch(`/greet?name=${name}`).then(response => response.text()).then(text => document.getElementById('greeting').innerText = text);}</script>
</body>
</html>
使用 Thymeleaf 进行模板渲染
Thymeleaf 是一个用于 Java 的模板引擎,常用于 Spring Boot 项目中渲染 HTML 页面。
// Spring Boot 控制器
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class ThymeleafExample {@GetMapping("/greet")public String greet(@RequestParam String name, Model model) {model.addAttribute("name", name);return "greet";}
}
<!-- Thymeleaf 模板 greet.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Greet</title>
</head>
<body><h1>Hello, <span th:text="${name}"></span></h1>
</body>
</html>
使用 JSP 进行页面渲染
JSP(JavaServer Pages)是一种用于创建动态网页的技术,允许在 HTML 中嵌入 Java 代码。
// Servlet 示例
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/greet")
public class JSPExample extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");request.setAttribute("name", name);request.getRequestDispatcher("/greet.jsp").forward(request, response);}
}
<!-- JSP 页面 greet.jsp -->
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Greet</title>
</head>
<body><h1>Hello, <%= request.getAttribute("name") %></h1>
</body>
</html>
总结
Java 提供了多种前端界面开发方式,Swing 和 JavaFX 适用于桌面应用程序,AWT 是早期的 GUI 工具包,而 Web 前端与 Java 后端的交互则适用于 Web 应用程序。每种方式都有其特定的使用场景和优势,开发者可以根据需求选择合适的工具。