📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Sistemas com Java (Swing/JavaFX). Recomendado revisar antes de começar.

🖥️ Contador Interativo Desktop com Java Swing & MVC

v1.0 — Interfaces Desktop, Event Dispatch Thread (EDT), Layout Managers e MVC

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 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.

—`

🎯 Objetivo & Escopo do Projeto

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).

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Supervisor de Linha de Produção)

“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.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

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

—`

📋 Fase 2 — Backlog & User Stories

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

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# 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

—`

🛠️ Fase 4 — Implementação Guiada (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));
    }
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd javadesk_contador_01_swing

2. Execute a aplicação e os testes

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`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Comportamento

—`

✅ Checkpoint Final

  1. Janela Swing abrindo centralizada sem travamento de threads.
  2. Event Listeners vinculados e funcionais.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal