Spec — Galho 5 da trilha Java Senior (Swing)
1. Contexto e motivação
Este é o quinto galho da trilha Java Senior (roadmap em docs/superpowers/specs/2026-06-02-java-senior-roadmap-design.md). Pressupõe leitura do roadmap, que estabelece topologia flat, esquema de 3 fases, padrões editoriais e política de poda. Os Galhos 1 (Linguagem, 15 notas) e 4 (Concorrência, 16 notas) já fecharam e mergearam em main — seus artefatos são o template de padrão e qualidade deste galho.
Diferença estrutural decisiva: este é o primeiro galho construído POR PESQUISA, não por refator de monolito. O roadmap (§5, Galho 5) confirma: “Tronco a podar: nenhum (galho novo).” Não existe Swing.md para refatorar. As notas nascem de docs oficiais (docs.oracle.com / dev.java / The Java Tutorials — Creating a GUI with Swing) verificadas via WebFetch. Consequências:
- Sem seção de poda (§6 do spec do Galho 4 não tem equivalente aqui).
- Sem pré-flight de leitura de tronco. No lugar dele: pré-flight = confirmar o estado atual de manutenção/adoção do Swing via fonte oficial, sem inventar números (ver §6).
- A matéria-prima é a documentação oficial, não um texto pré-existente do autor — atenção redobrada à fabricação (todo exemplo é neutro ou hipotético explícito).
Swing é a primeira das duas interfaces desktop da trilha (Galho 6 = JavaFX). Posicionado após Concorrência (Galho 4) por causa da Event Dispatch Thread (EDT): o modelo de threading do Swing só faz sentido depois que o leitor domina threads, executors e a noção de single-thread confinement.
Atenção ao estado atual (capstone, nota 12): “modo de manutenção” é jargão da comunidade, não termo oficial da Oracle. O pré-flight (§6) confirmou via Java Client Roadmap Update (Oracle, 2018) e Java Client Roadmap Updates (blogs.oracle.com) que Swing e AWT são “core Java SE technologies”, suportados enquanto o JDK for suportado — não deprecados, não removidos. A capstone deve separar honestamente o que a Oracle declara (suporte como tecnologia core) de o consenso de-facto da comunidade (poucas features novas, papel de nicho hoje), sem inventar estatísticas e sem virar nem obituário nem panfleto.
2. Objetivo
Produzir, em uma sessão de execução dedicada, 12 notas atômicas + 1 MOC do galho + expansão do Dicionário de Java + ativação do MOC central, em 03-Dominios/Java/Swing/ e 03-Dominios/Java/, todas publish: true, em PT-BR, distribuídas em 3 fases (4 Iniciado + 5 Adepto + 3 Magus). Sem poda (galho novo).
Ao terminar o galho, o leitor deve conseguir:
- Explicar em inglês o modelo de componentes do Swing (lightweight vs heavyweight/AWT), o contrato da EDT (single-thread rule) e a arquitetura MVC/separable-model.
- Escolher e justificar o layout manager certo, o model certo (
TableModel/ListModel/Document) e a estratégia de threading (invokeLatervsSwingWorker) para um cenário dado. - Reconhecer e diagnosticar em code review as armadilhas clássicas (tocar componente fora da EDT, bloquear a EDT, null layout,
KeyListenerondeInputMap/ActionMapé correto). - Decidir e defender honestamente quando Swing ainda faz sentido (ferramentas internas, IDEs, apps offline/legados) e quando não (app moderno rico/web/mobile), com o status real da API na ponta da língua.
A barra é “decidir, justificar, reconhecer patterns e armadilhas em code review” — não “implementar um toolkit de UI from scratch”.
3. Saídas concretas
3.1. Notas (03-Dominios/Java/Swing/)
Pasta nova, flat. 12 notas + 1 MOC. Numeração global por galho (não reinicia por fase). Pasta precisa de index.md (Quartz folder-link).
Iniciado (4 notas — vocabulário + modelo mental)
| # | Nota | Escopo nuclear |
|---|---|---|
| 01 | O modelo do Swing | O que é Swing; lightweight (Swing) vs heavyweight (AWT) e a relação com o AWT; hierarquia Component→Container→JComponent; top-level containers (JFrame/JDialog/JWindow) e o content pane; arquitetura pluggable look-and-feel (intro, deep na 09); estrutura de um primeiro app. Porta de entrada do galho. |
| 02 | Componentes e containers | Catálogo de widgets: JButton/JLabel/JTextField/JTextArea/JPasswordField, JCheckBox/JRadioButton+ButtonGroup, JComboBox/JList, JTable/JTree (intro — models vêm na 07), containers intermediários (JPanel/JScrollPane/JTabbedPane/JSplitPane), menus (JMenuBar/JMenu/JMenuItem), JToolBar, diálogos (JDialog/JOptionPane). Panorâmica de vocabulário. |
| 03 | Layout managers | BorderLayout, FlowLayout, GridLayout, BoxLayout, CardLayout, GroupLayout, GridBagLayout (o power tool, com GridBagConstraints); aninhamento de painéis; preferred/minimum/maximum size; null layout (posicionamento absoluto) como anti-pattern. |
| 04 | O modelo de eventos | Modelo event-driven (delegation event model); listeners (ActionListener, MouseListener, KeyListener, FocusListener, WindowListener); event objects (ActionEvent, MouseEvent); lambdas vs classes anônimas vs adapters (MouseAdapter); o observer pattern por trás. Linka pro Galho 1 (interfaces funcionais / lambdas). |
Adepto (5 notas — domínio operacional; 3 densas → opus)
| # | Nota | Escopo nuclear |
|---|---|---|
| 05 | A Event Dispatch Thread (EDT) (opus) | A single-thread rule; por que a GUI é single-threaded; o que roda na EDT (event handling + painting); a regra de ouro (não bloquear a EDT; não tocar componentes fora da EDT); SwingUtilities.invokeLater/invokeAndWait; SwingUtilities.isEventDispatchThread. Dono do “como o Swing usa threads”; linka pro Galho 4 (02 Threads) pros primitivos, sem re-explicar concorrência. |
| 06 | SwingWorker e tarefas em background (opus) | SwingWorker<T,V>: doInBackground/publish/process/done, progress (setProgress/PropertyChangeListener), cancelamento, get(); o handoff worker→EDT; javax.swing.Timer (vs java.util.Timer). Linka pro Galho 4 (08 Executors) sem re-explicar pools. |
| 07 | MVC em Swing e os models (opus) | A arquitetura separable model (o “MVC” pragmático do Swing); TableModel/AbstractTableModel/DefaultTableModel, ListModel/AbstractListModel/DefaultListModel, ComboBoxModel, Document (texto), TreeModel; model listeners (TableModelListener) e como a view reage; selection models. Por que separar dados de apresentação. |
| 08 | Renderers e editors | Cell renderers (TableCellRenderer/ListCellRenderer/DefaultTableCellRenderer), cell editors (TableCellEditor), o rubber-stamp pattern (um componente reusado pra pintar N células), rendering customizado em JTable/JList/JComboBox. Par natural com a 07. |
| 09 | Look & Feel e temas | L&F plugável; Metal/Nimbus/system/Motif (bundled no JDK); UIManager (defaults, trocar L&F em runtime, updateComponentTreeUI); FlatLaf como o L&F moderno de-facto da comunidade (open-source, third-party — não-Oracle, com 1 snippet de setup e ressalva explícita de dependência externa); intro a borders (BorderFactory) e fontes. |
Magus (3 notas — maestria + decisão de arquitetura; capstone → opus)
| # | Nota | Escopo nuclear |
|---|---|---|
| 10 | Custom painting e componentes customizados | paintComponent(Graphics) e Graphics2D (shapes, antialiasing via RenderingHints); a paint chain (paint→paintComponent/paintBorder/paintChildren); double buffering (default no Swing); repaint(Rectangle) vs revalidate; estender JComponent/JPanel pra criar componentes reutilizáveis; getPreferredSize. |
| 11 | Action API, key bindings e performance | Action API (javax.swing.Action/AbstractAction — encapsula comportamento + estado enabled + texto/ícone, compartilhado entre botão/menu/toolbar); key bindings (InputMap/ActionMap e por que vencem KeyListener); responsividade (manter a EDT livre, lazy/virtual models pra JTable/JList grandes, repaint de região). Liga de volta à EDT (05) e ao SwingWorker (06). |
| 12 | Swing hoje — estado atual (capstone, opus) | Status de suporte/manutenção: frase honesta separando declaração oficial Oracle (Swing/AWT = core Java SE, suportado enquanto o JDK for) de consenso de-facto da comunidade (poucas features novas, papel de nicho) — com fonte + data, sem estatísticas inventadas; onde Swing ainda faz sentido (ferramentas internas, IDEs — IntelliJ/NetBeans/Eclipse usam Swing, apps offline/desktop legados, embedded) vs onde não (app moderno rico/web/mobile); Swing × virtual threads com honestidade (EDT continua single-thread; virtual threads não mudam o modelo da EDT — verificar); gancho pro Galho 6 (JavaFX) SEM comparar a fundo (texto “planejado”, sem wikilink quebrado); munição de entrevista enquadrada como decisão de arquitetura honesta. WebFetch obrigatório (Oracle roadmap + dev.java). |
Decisões de fronteira (escopo NÃO coberto aqui ou de outro dono):
- Threading base (threads, executors, virtual threads) → Galho 4 é dono. As notas 05 (EDT) e 06 (SwingWorker) são donas do threading do Swing (single-thread rule,
invokeLater,SwingWorker) e linkam pra[[03-Dominios/Java/Concorrência e paralelismo/index|Concorrência]]e notas específicas (02 Threads, 08 Executors) — não re-explicam concorrência base. Swing × virtual threads→ a honestidade é: a EDT permanece single-thread; virtual threads ajudam o trabalho de background (comoSwingWorkerou executors), não substituem a EDT. Citar com status verificado, sem hype.- JavaFX → Galho 6 (próximo). É dono da comparação Swing vs JavaFX. O Galho 5 deixa só um gancho na capstone (12); NÃO comparar a fundo, NÃO linkar notas inexistentes do Galho 6 — usar texto “planejado” no MOC.
- OOP / interfaces / lambdas → Galho 1. A nota 04 (eventos) e a 10 (componentes customizados) linkam pro Galho 1 quando o conceito conectar, sem re-ensinar OOP.
JTable(o tópico mais pesado) se distribui: catálogo na 02, model na 07, renderers/editors na 08, performance na 11 — nenhuma nota sozinha vira monstro.
3.2. MOC do galho
03-Dominios/Java/Swing/index.md:
type: moc,status: growing- Frontmatter padrão (
title: "Swing", tagsjava/swing/moc, aliases["Swing", "Galho 5 - Swing"]) - TL;DR callout (galho cobre GUI desktop Swing: componentes, layouts, eventos, EDT/SwingWorker, MVC/models, L&F, custom painting e o estado atual da API)
- “Sobre este galho” + audiência primária/secundária + nota de que é o primeiro galho construído por pesquisa (sem tronco)
- Conteúdo agrupado em 3 H2 (
## Iniciado/## Adepto/## Magus) com wikilinks pras 12 notas (uma linha descritiva cada, no padrão dos MOCs dos Galhos 1 e 4) - Rotas alternativas (5):
- Completa — 01 → 12 em ordem
- Entrevista internacional — 01 → 04 → 05 → 06 → 07 → 12 (modelo, eventos, EDT, SwingWorker, MVC, estado atual — o que mais cai)
- Threading do Swing — 05 → 06 → 11 (EDT, SwingWorker, performance/responsividade) — liga ao Galho 4
- Construir uma tela do zero — 01 → 02 → 03 → 04 → 07 (montar uma UI funcional com dados)
- Aparência e customização — 03 → 09 → 08 → 10 (layouts, L&F, renderers, custom painting)
- “Veja também”: MOC central
[[03-Dominios/Java/index|Trilha Java]], Galho 1 (Linguagem), Galho 4 (Concorrência), Galho 6 (JavaFX, planejado — texto sem wikilink), Dicionário de Java - Dataview “Todas as notas do galho”
3.3. Dicionário de Java (EXPANSÃO — não recriar)
03-Dominios/Java/Dicionário de Java.md já existe (criado no Galho 1, expandido no Galho 4, type: glossary, seções alfabéticas). Este galho expande o arquivo existente inserindo os verbetes de Swing em ordem alfabética case-insensitive (sem acento) nas seções apropriadas, criando seções novas quando necessário. Nunca recriar o arquivo nem reordenar verbetes existentes. Atualizar updated: 2026-06-03 no frontmatter.
Verbetes a inserir (~20-24):
Action API, adapter (event adapter), AWT (Abstract Window Toolkit), cell renderer, cell editor, componente lightweight / heavyweight, content pane, delegation event model, Document (modelo de texto), double buffering, EDT (Event Dispatch Thread), FlatLaf, GridBagLayout, InputMap / ActionMap (key bindings), invokeLater / invokeAndWait, JComponent, layout manager, listener (event listener), look and feel (L&F), Nimbus, paintComponent / custom painting, pluggable look-and-feel, separable model (MVC do Swing), SwingWorker, TableModel / ListModel, UIManager.
Cada verbete: definição curta (1-3 linhas) em PT-BR + Veja também: apontando pra(s) nota(s) canônica(s) do galho. Conferir 1:1 que os headings dos verbetes batem EXATAMENTE com as âncoras usadas nas notas (extrair as âncoras de Dicionário das notas e conferir, como no Galho 4).
3.4. MOC central (ativação do Galho 5)
03-Dominios/Java/index.md já existe e lista os 18 galhos. Task mínima: trocar a linha 32 (atualmente 5. Swing *(planejado)* — componentes, layout managers, EDT, MVC, estado atual de adoção) por um wikilink ativo no padrão das linhas 25/28:
5. [[03-Dominios/Java/Swing/index|Swing]] — componentes e containers, layout managers, modelo de eventos, EDT/SwingWorker, MVC/models, Look & Feel, custom painting, estado atual da APIAtualizar updated: 2026-06-03. Não mexer no resto do MOC central.
3.5. Sem poda
Galho novo, sem tronco. Não há Swing.md a podar. (O Frontend/JavaFX.md, 161 linhas, é tronco do Galho 6, não deste.) Nenhuma task de poda; nenhuma higienização de monolito.
4. Convenções por nota
Herda §7 do roadmap e §4 dos specs dos Galhos 1 e 4. Reforços específicos:
4.1. Frontmatter
---
title: "<título>"
created: 2026-06-03
updated: 2026-06-03
type: concept
status: seedling
publish: true
fase: iniciado | adepto | magus
tags:
- java
- swing
- <fase>
- <tags específicas: componentes, layout, eventos, edt, swingworker, mvc, model, renderer, look-and-feel, painting>
aliases:
- <aliases opcionais>
---4.2. Estrutura H2 obrigatória
> [!abstract] TL;DR(callout, NÃO H2)## O que é/## Por que importa/## Como funciona(≥3 subseções em notas Adepto/Magus)## Na prática— exemplos compiláveis; framing neutro (“padrão observado no JDK/em IDEs Swing”, “caso típico em ferramenta interna”); NUNCA “no meu projeto”## Armadilhas— ≥2 (Iniciado) / ≥3 (Adepto/Magus), cada uma com descrição + exemplo curto de código demonstrando o problema + fix em 1 linha## Em entrevista— frase pronta em inglês com 3+ sentenças (trade-off + decisão + caveat) + vocabulário 6+ termos PT→EN## Veja também— wikilinks SEM backticks; sempre inclui notas relacionadas do galho +[[03-Dominios/Java/Swing/index|MOC do galho]]+[[03-Dominios/Java/index|Trilha Java]]+ (quando o conceito conectar)[[03-Dominios/Java/Concorrência e paralelismo/index|Concorrência]]/ Galho 1 + verbetes do Dicionário. Evitar âncoras same-file[[#heading|Heading]](falso-positivo no checker).## Referências— docs oficiais (dev.java, docs.oracle.com/The Java Tutorials), JEPs quando relevantes, projetos open-source identificados (FlatLaf, OpenJDK). Toda nota é fundada em fonte oficial verificada via WebFetch (galho de pesquisa).
4.3. Restrições absolutas
- Sem fabricação de experiência pessoal. Exemplos neutros (
Order,Customer,OrderTableModel) ou hipotéticos explícitos (// hipotético: ...). NUNCAjosenaldonem casos vividos. Atenção redobrada na capstone (12): nenhuma estatística inventada (“X% das empresas usam Swing”) nem status fabricado — só o que a fonte oficial declara, com data. - Sem invenção de APIs/componentes/comportamentos. Como é galho de pesquisa, WebFetch é obrigatório no Step 1 de cada nota pra fundar o conteúdo em doc oficial; nada de API “de memória” sem conferir.
- Code samples compiláveis — Swing válido; preferir snippets executáveis (classe
maincomSwingUtilities.invokeLater). Ao mostrar um bug de threading (tocar componente fora da EDT), deixar explícito que o sintoma é não-determinístico. - Comparações justas — ao comparar (lightweight vs heavyweight,
invokeLatervsSwingWorker,KeyListenervsInputMap, Swing vs JavaFX/web), incluir “quando X” E “quando Y”. Sem dogma. A capstone é o ápice dessa exigência (nem obituário nem panfleto). - Status hedged + datado — “Swing/AWT são tecnologias core do Java SE, suportadas enquanto o JDK for (Oracle Java Client Roadmap, 2018/2020); na prática recebem poucas features novas — verifique a release atual” em vez de “Swing está morto/em manutenção” cru.
- Wikilinks sem backticks em “Veja também”; MOC do galho + MOC central obrigatórios. Não linkar notas do Galho 6 (JavaFX, inexistente) — usar texto “planejado”.
- Code fences corretos:
```javapra código,```textpra output/stack trace. Sempre fechadas. fase:no frontmatter + na tag — obrigatório.- Higiene de commits — sem
Co-Authored-By: Claude, sem--no-verify,git add <path>nominal, 1 commit por nota. - Tom pedagógico graduado — Iniciado assume pouco; Magus assume domínio dos anteriores e dos Galhos 1 e 4 (EDT pressupõe a noção de thread).
5. Conteúdo por nota (síntese)
Esboço do recorte. Toda nota funda-se em doc oficial verificada via WebFetch (não há tronco a copiar). Fontes-base: The Java Tutorials — Creating a GUI with Swing (docs.oracle.com/javase/tutorial/uiswing/), dev.java, Javadoc de javax.swing.
- 01 — O modelo do Swing. O que é Swing (toolkit de GUI sobre o AWT); lightweight (Swing, desenhado em Java) vs heavyweight (AWT, peers do SO); hierarquia
Component→Container→JComponent; top-level containers (JFrame/JDialog/JWindow) e o content pane;pack/setVisible/setDefaultCloseOperation; intro à arquitetura pluggable L&F. Armadilhas: misturar componentes AWT e Swing; esquecersetVisible(true); construir a UI fora da EDT (teaser da 05). Fontes: Tutorial “About the JFC and Swing”, “A Visual Guide to Swing Components”. - 02 — Componentes e containers. Catálogo: botões/labels/campos de texto, seleção (
JCheckBox/JRadioButton+ButtonGroup,JComboBox,JList), tabelas/árvores (intro), containers (JPanel/JScrollPane/JTabbedPane/JSplitPane), menus,JToolBar, diálogos (JOptionPane). Armadilhas: adicionar muitos componentes semJScrollPane;JList/JTablesem model adequado (aponta pra 07);JOptionPanechamado fora da EDT. Fontes: “Using Swing Components”. - 03 — Layout managers. Cada layout, quando usar,
GridBagConstraints, aninhamento de painéis, sizing. Armadilhas: null layout (quebra em resize/DPI); abusar deGridBagLayoutondeBoxLayoutresolve; ignorarpreferredSize. Fontes: “Laying Out Components Within a Container”. - 04 — O modelo de eventos. Delegation event model, listeners e event objects, lambda vs anônima vs adapter, registro/remoção de listeners. Linka pro Galho 1 (interfaces funcionais). Armadilhas: trabalho pesado no listener (bloqueia EDT — aponta pra 05/06); segurar referência e vazar listener;
KeyListenerpra atalho global (aponta pra 11). Fontes: “Writing Event Listeners”. - 05 — A Event Dispatch Thread (EDT) (opus). Single-thread rule, o que roda na EDT, a regra de ouro,
invokeLater/invokeAndWait,isEventDispatchThread. Dono do threading do Swing. Linka Galho 4 (02). Armadilhas: atualizar componente de uma thread de background (corrupção/erro intermitente) → fixinvokeLater;invokeAndWaitna própria EDT (deadlock); construir a UI namainem vez da EDT. Fontes: “Concurrency in Swing”; JavadocSwingUtilities. - 06 — SwingWorker e tarefas em background (opus).
SwingWorker<T,V>e seu ciclo,publish/process/done, progress, cancelamento,get(),javax.swing.Timer. Linka Galho 4 (08). Armadilhas: lerget()na EDT antes dedone(bloqueia); atualizar UI dentro dedoInBackground(fora da EDT); ignorar exceção engolida emdone. Fontes: “Worker Threads and SwingWorker”; JavadocSwingWorker. - 07 — MVC em Swing e os models (opus). Separable model,
TableModel/AbstractTableModel/DefaultTableModel,ListModel,ComboBoxModel,Document,TreeModel, model listeners, selection models. Armadilhas: mutar dados do model sem dispararfireTableDataChanged(view dessincroniza); usarDefaultTableModelcomVectorcru onde umAbstractTableModeltipado é melhor; lógica de negócio no renderer (aponta pra 08). Fontes: “How to Use Tables”, “How to Use Lists”; JavadocTableModel. - 08 — Renderers e editors.
TableCellRenderer/ListCellRenderer/DefaultTableCellRenderer,TableCellEditor, rubber-stamp pattern, customização. Armadilhas: criar umnew JLabelpor célula (vaza performance — reusar o componente); estado mutável no renderer; editor semstopCellEditing. Fontes: “Using Custom Renderers”; JavadocTableCellRenderer. - 09 — Look & Feel e temas. Pluggable L&F,
UIManager, Metal/Nimbus/system/Motif, trocar L&F +updateComponentTreeUI, FlatLaf (third-party, open-source, com setup e ressalva),BorderFactory, fontes. Armadilhas: setar L&F depois de criar componentes (semupdateComponentTreeUI); assumir que system L&F existe em todo SO; hard-coded colors quebrando no dark mode. Fontes: “Modifying the Look and Feel”; JavadocUIManager; repo/docs FlatLaf (identificado como third-party). - 10 — Custom painting e componentes customizados.
paintComponent/Graphics2D, paint chain,RenderingHints(antialias), double buffering,repaint/revalidate, estenderJComponent/JPanel,getPreferredSize. Armadilhas: sobrescreverpaintem vez depaintComponent; não chamarsuper.paintComponent(artefatos); desenhar fora da EDT/segurarGraphics. Fontes: “Performing Custom Painting”; JavadocJComponent#paintComponent. - 11 — Action API, key bindings e performance.
Action/AbstractAction(estado compartilhado entre botão/menu/toolbar),InputMap/ActionMap(por que venceKeyListener), responsividade (EDT livre, models grandes lazy/virtuais,repaintde região). Liga 05/06. Armadilhas: duplicar lógica em listener de botão e de menu (useAction);KeyListenerpra atalho (perde com foco) →InputMap/ActionMap; carregar 1M linhas numDefaultTableModeleager. Fontes: “How to Use Actions”, “How to Use Key Bindings”. - 12 — Swing hoje — estado atual (capstone, opus). Status oficial (core Java SE, suporte enquanto o JDK for — Oracle roadmap 2018/2020, com data) vs consenso de-facto (poucas features novas, nicho); onde ainda faz sentido (ferramentas internas, IDEs Swing — IntelliJ/NetBeans/Eclipse, apps offline/legados) vs onde não (moderno rico/web/mobile); Swing × virtual threads (EDT segue single-thread; VTs ajudam background, não a EDT — verificar); ecossistema vivo (FlatLaf); gancho pro Galho 6 (JavaFX, planejado); enquadramento de entrevista. Cheatsheet de fechamento (qual nota pra qual problema). WebFetch obrigatório. Armadilhas (de raciocínio): tratar Swing como “morto” (é suportado); escolher Swing por inércia pra app moderno; assumir que virtual threads “consertam” a EDT. Fontes: Oracle Java Client Roadmap (2018, 2020); dev.java; Javadoc/JEPs de virtual threads (cross-check com Galho 4 nota 12).
6. Pré-flight (substitui a poda): verificação de estado
Como não há tronco, o pré-flight do galho é confirmar fatos via fonte oficial antes de escrever, especialmente para a capstone (12). Executado nesta fase de brainstorming e a ser re-confirmado na execução da nota 12:
- Status de suporte do Swing/AWT — confirmado: “core Java SE technologies”, suportadas enquanto o JDK for (Oracle Java Client Roadmap 2018; blogs.oracle.com). “Modo de manutenção” é jargão da comunidade, não termo oficial — a capstone separa os dois.
- JavaFX desacoplado do JDK no Java 11 (OpenJFX standalone) — confirmado na mesma fonte; relevante pro gancho do Galho 6.
- Versão do The Java Tutorials — o trail oficial Creating a GUI with Swing tem banner “written for JDK 8”; a API Swing é estável desde então, mas as notas devem conferir cada API no Javadoc atual (Java 21/25) e em
dev.javaquando houver versão mais nova, não assumir que tudo do tutorial JDK 8 é o estado da arte. - Swing × virtual threads — re-confirmar na nota 12 (cross-check com Galho 4 nota 12) que a EDT permanece single-thread e que virtual threads não alteram o modelo da EDT.
Nenhum número de adoção é inventado. Quando faltar fato verificável, PERGUNTAR antes de escrever.
7. Critérios de aceitação do galho
Além dos critérios gerais (§10 do roadmap):
- 12 notas em
03-Dominios/Java/Swing/, frontmatter completo comfase:,publish: true, distribuídas 4/5/3. - MOC do galho com 3 subseções de fase + 5 rotas alternativas + dataview + folder-link resolve (
index.mdpresente). - Dicionário de Java expandido (não recriado) com ~20-24 verbetes de Swing em ordem alfabética; verbetes dos Galhos 1 e 4 intactos;
updatedatualizado; headings dos verbetes conferidos 1:1 com as âncoras usadas nas notas. - MOC central
Java/index.mdcom Galho 5 ativado (linha 32 vira wikilink); resto intacto. - Sem poda (galho novo) — nenhum tronco modificado.
- Cada nota: TL;DR; 3-5 code samples (notas conceituais); “Em entrevista” com frase 3+ sentenças EN + 6+ termos PT→EN; “Armadilhas” com exemplo+fix (≥2 Iniciado, ≥3 Adepto/Magus); wikilinks (galho + MOC central + Galhos 1/4 quando conectar + Dicionário); “Referências” com docs oficiais verificadas.
- Zero fabricação de experiência pessoal; zero estatística inventada na capstone; status do Swing hedged, datado e com fonte.
- APIs e comportamentos fundados em doc oficial (WebFetch no Step 1 de cada nota); nenhuma API “de memória”.
- 1 commit por nota; sem
Co-Authored-By: Claude; sem--no-verify; stage nominal. verificar-wikilinksroda limpo na pasta do galho (cuidado: falso-positivo em self-anchors[[#heading|Heading]]— preferir não usar âncoras same-file); Quartz publica sem erros.
8. Riscos e mitigações
| Risco | Mitigação |
|---|---|
| Galho de pesquisa: inventar API/comportamento “de memória” | WebFetch obrigatório no Step 1 de cada nota; toda nota tem “Referências” com fonte oficial; nada afirmado sem conferir no Javadoc/Tutorial. |
| Capstone (12) virar obituário ou panfleto, ou inventar estatística | Frase honesta separa declaração oficial Oracle (com data/fonte) de consenso de-facto; nenhum número de adoção; trade-off “quando sim / quando não” obrigatório; WebFetch. |
| Sobreposição de threading com Galho 4 (EDT/SwingWorker re-explicarem concorrência) | Notas 05/06 são donas só do threading do Swing; linkam Galho 4 (02 Threads, 08 Executors) pros primitivos; não re-explicam threads/pools. |
| Comparar Swing vs JavaFX a fundo (que é do Galho 6) | Só gancho na capstone; Galho 6 é dono; texto “planejado” no MOC, sem wikilink quebrado. |
| Tutorial oficial é “written for JDK 8” e pode estar desatualizado | Conferir cada API no Javadoc atual (21/25) e dev.java; declarar version-specificity quando houver; não assumir que o tutorial JDK 8 é o estado da arte. |
JTable (tópico pesado) inflar uma nota | Distribuído: catálogo (02), model (07), renderers/editors (08), performance (11); nenhuma nota sozinha o cobre. |
| Endossar dependência third-party (FlatLaf) como se fosse oficial | FlatLaf rotulado explicitamente como community/open-source/não-Oracle, com ressalva; L&F bundled (Metal/Nimbus/system) é o baseline. |
| Code samples de Swing não-determinísticos (threading) | Declarar que sintomas de violação da EDT são intermitentes; exemplos demonstram o bug sem prometer reprodução garantida. |
| Magus crescer demais | Distribuição 4/5/3 fixada (Magus leve por design — 1 nota avançada dividida + capstone); se inflar, dividir nota, não galho. |
9. Próximos passos
- Aprovação deste spec
- Plano de execução via skill
superpowers:writing-plans→docs/superpowers/plans/2026-06-03-java-galho-05-swing-execution.md - Execução via
superpowers:subagent-driven-developmentem branch dedicadajava-galho-05-swing(1 subagente por nota; sonnet, opus pras notas 05/06/07 e 12; review por fase + fix loop) - Verificação de wikilinks + build Quartz
- Revisão do roadmap com aprendizados antes do próximo galho
10. Documentos relacionados
2026-06-02-java-senior-roadmap-design.md— roadmap macro (18 galhos)2026-06-02-java-galho-01-linguagem-design.md/...-execution.md— Galho 1 (template de qualidade/plano)2026-06-03-java-galho-04-concorrencia-design.md/...-execution.md— Galho 4 (template mais recente; donos de threading que o Galho 5 linka)- Artefatos a atualizar:
03-Dominios/Java/Dicionário de Java.md,03-Dominios/Java/index.md - Fontes-base do galho: The Java Tutorials — Creating a GUI with Swing (
docs.oracle.com/javase/tutorial/uiswing/),dev.java, Javadocjavax.swing, Oracle Java Client Roadmap (2018/2020) - Memórias: project_trilha_java, project_trilhas_fases_aprendizado, feedback_no_fabrication, feedback_quartz_index, feedback_commits