← Назад к вопросам

Как использовать UI?

1.6 Junior🔥 81 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Использование UI в Java разработке

Вопрос про UI может означать разные вещи в контексте Java разработки. Расскажу о различных способах работы с пользовательским интерфейсом, которые я применял в разных проектах.

1. Java Swing для Desktop приложений

В некоторых legacy-проектах я работал с Swing:

import javax.swing.*;
import java.awt.*;

public class MainWindow extends JFrame {
    public MainWindow() {
        setTitle("Java Application");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 600);
        
        JPanel panel = new JPanel();
        JLabel label = new JLabel("Hello, World!");
        JButton button = new JButton("Click me");
        
        button.addActionListener(e -> {
            label.setText("Button clicked!");
        });
        
        panel.add(label);
        panel.add(button);
        add(panel);
        
        setVisible(true);
    }
    
    public static void main(String[] args) {
        new MainWindow();
    }
}

2. Web UI с JSP и Servlets

В старых web-приложениях использовал JSP:

// Servlet
@WebServlet("/users")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        List<User> users = userService.getAll();
        req.setAttribute("users", users);
        req.getRequestDispatcher("/users.jsp").forward(req, resp);
    }
}

3. Spring MVC

Традиционный подход с контроллерами:

@Controller
@RequestMapping("/api/users")
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping
    public String getUsers(Model model) {
        model.addAttribute("users", userService.getAll());
        return "users"; // имя JSP или Thymeleaf шаблона
    }
    
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        model.addAttribute("user", userService.findById(id));
        return "user-detail";
    }
}

4. REST API с React/Angular фронтом

В современных проектах я разделяю backend и frontend:

@RestController
@RequestMapping("/api/v1/users")
public class UserRestController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping
    public ResponseEntity<List<UserDTO>> getAllUsers() {
        return ResponseEntity.ok(userService.getAll());
    }
    
    @PostMapping
    public ResponseEntity<UserDTO> createUser(@RequestBody CreateUserRequest request) {
        User user = userService.create(request);
        return ResponseEntity.status(HttpStatus.CREATED)
            .body(userService.toDTO(user));
    }
}

Фронтенд (JavaScript/TypeScript):

fetch(/api/v1/users)
    .then(response => response.json())
    .then(data => renderUsers(data))
    .catch(error => console.error(error));

5. Thymeleaf шаблонизация

Модерн подход для server-side rendering:

<!-- users.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Users</title>
</head>
<body>
    <table>
        <tr th:each="user : ${users}">
            <td th:text="${user.name}">Name</td>
            <td th:text="${user.email}">Email</td>
        </tr>
    </table>
</body>
</html>

6. JavaFX для современных Desktop приложений

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FXApp extends Application {
    @Override
    public void start(Stage stage) {
        VBox root = new VBox(10);
        Button button = new Button("Click me");
        
        button.setOnAction(e -> {
            System.out.println("Button clicked");
        });
        
        root.getChildren().add(button);
        
        Scene scene = new Scene(root, 400, 300);
        stage.setScene(scene);
        stage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

7. Что я предпочитаю в 2025 году

Для большинства modern проектов я рекомендую:

  • Backend: Spring Boot для REST API
  • Frontend: React/Vue/Angular для SPA
  • Разделение ответственности: backend отвечает за бизнес-логику, frontend за UX

Этот подход:

  • Позволяет независимо развивать backend и frontend
  • Упрощает тестирование
  • Лучше масштабируется
  • Позволяет использовать best practices обоих миров

Java не лучший выбор для frontend, поэтому я оставляю UI современным JavaScript фреймворкам, а Java использую для того, в чём она лучше — backend логика, обработка данных, интеграция систем.