📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com Java (Swing/JavaFX). Recomendado revisar antes de começar.
v1.0 — Interfaces Desktop, Event Dispatch Thread (EDT), Layout Managers e MVC
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Interface Gráfica Desktop · Java Swing · MVC · EDT · ActionListeners
- v2: Sistema de Cadastro com JTable & Persistência JDBC
- v3: Interface Gráfica Moderna com JavaFX & CSS Styling
- v4: Jogo Blackjack (21) Profissional com JavaFX & Empacotamento Nativo (
jpackage)
🎓 Nível Profissional Simulado: Desenvolvedor Java Desktop Júnior. Embora a web seja dominante, sistemas industriais, caixas de supermercado (PDV) e aplicações corporativas legadas rodam em Java Desktop. Compreender o funcionamento da Event Dispatch Thread (EDT) e o padrão MVC Desktop é um diferencial valioso.
—`
Construir uma aplicação gráfica desktop de Contador e Painel de Controle em Java (JDK 21) com Swing, aplicando a arquitetura MVC (Model-View-Controller), ouvintes de eventos (ActionListeners) e renderização segura na Event Dispatch Thread (EDT).
—`
“Precisamos de um aplicativo de computador simples para nossos operadores registrarem a contagem de peças inspecionadas na esteira da fábrica. O programa deve ter um visor numérico grande, botões para Incrementar (+1), Decrementar (-1) e Resetar (0), além de mudar a cor do texto para vermelho se a meta de 100 peças for ultrapassada.”
| ID | Tipo | Descrição | Origem no Briefing |
|---|---|---|---|
| RF01 | Funcional | Exibir valor atual do contador em JLabel com tipografia ampliada. |
“visor numérico grande” |
| RF02 | Funcional | Botões para incrementar (+1), decrementar (-1) e resetar (0). | “botões Incrementar, Decrementar, Resetar” |
| RF03 | Funcional | Alterar cor do visor dinamicamente quando o valor atingir o limiar estipulado. | “mudar a cor do texto para vermelho” |
| RNF01 | Não-Funcional | Inicialização obrigatória na Event Dispatch Thread via SwingUtilities.invokeLater. |
Thread Safety UI |
| RNF02 | Não-Funcional | Separação das regras de negócio (Model) dos componentes visuais (View). | Arquitetura MVC |
—`
| ID | User Story | Prioridade |
|---|---|---|
| US01 | Como operador, quero clicar nos botões e ver o visor numérico atualizado instantaneamente. | Alta |
| US02 | Como supervisor, quero que o layout seja centralizado e responsivo ao redimensionar a janela. | Média |
—`
# Branch da funcionalidade
git checkout -b feature/US01-swing-mvc-counter
# Compilar e executar com Java 21
javac -d bin src/com/portal/swing/*.java && java -cp bin com.portal.swing.Main
—`
MainFrame.java)package com.portal.swing;
import javax.swing.*;
import java.awt.*;
public class MainFrame extends JFrame {
private int contador = 0;
private final JLabel lblValor;
public MainFrame() {
setTitle("Contador Industrial Swing");
setSize(400, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new BorderLayout(10, 10));
lblValor = new JLabel("0", SwingConstants.CENTER);
lblValor.setFont(new Font("Arial", Font.BOLD, 48));
add(lblValor, BorderLayout.CENTER);
JPanel painelBotoes = new JPanel(new FlowLayout());
JButton btnInc = new JButton("+1");
JButton btnDec = new JButton("-1");
JButton btnReset = new JButton("Reset");
btnInc.addActionListener(e -> atualizar(contador + 1));
btnDec.addActionListener(e -> atualizar(contador - 1));
btnReset.addActionListener(e -> atualizar(0));
painelBotoes.add(btnDec);
painelBotoes.add(btnReset);
painelBotoes.add(btnInc);
add(painelBotoes, BorderLayout.SOUTH);
}
private void atualizar(int novo) {
contador = novo;
lblValor.setText(String.valueOf(contador));
lblValor.setForeground(contador > 100 ? Color.RED : Color.BLACK);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MainFrame().setVisible(true));
}
}
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd javadesk_contador_01_swing
javac -d bin src/**/*.java
java -cp bin com.exemplo.Main
# ou mvn test
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/javadesk_contador_01_swing`
—`
+1 incrementa o contador e a mudança de cor ocorre ao atingir 101.—`
- Janela Swing abrindo centralizada sem travamento de threads.
- Event Listeners vinculados e funcionais.
| ⬅️ Ver Todos os Projetos no Super-Hub | 🏠 Página Inicial do Portal |