Padrão de design para gerenciamento de janelas em um aplicativo Java Swing


9

Acabei de começar a criar meu primeiro aplicativo Java Swing. Quando o programa é aberto, ele exibe uma janela única e simples com um rótulo e alguns botões. Clicar em um desses botões deve apagar a tela de boas-vindas e substituí-la por um painel totalmente diferente.

Não sei ao certo qual é a melhor maneira de criar essa funcionalidade. Um método seria passar o meu JFramecomo argumento para ... praticamente todos os outros componentes, mas isso parece estranho para mim. Ou há cada painel dobrando como ouvinte de ação, mas isso também não parece certo.

Existe um padrão de design que eu deveria aplicar aqui? "Substituir o conteúdo da janela principal - e única -" deve ser uma operação razoavelmente comum. Um nome para o padrão seria suficiente; Eu posso usar o Google sozinho a partir daí. (Eu não diria não a uma explicação mais longa.)


Sendo esta uma pergunta sobre técnicas de programação reais, você provavelmente obterá muito mais respostas no Stack Overflow.
Alex Feinman

Respostas:


6

Ao criar aplicativos Swing, geralmente baseio-o no Padrão do Mediador. Nesse padrão, uma classe Mediador (geralmente o JFrame principal) lida com as diferentes partes da GUI (geralmente JPanels, JMenus ...) e cuida da comunicação entre elas.

Por exemplo, se um evento ocorreu no JPanel1, o JPanel1 notifica o mediador (o JFrame). o JFrame então executa uma ação modificando o JPanel2.

FYI: todos os meus projetos eram aplicativos de GUI de pequeno a médio porte, então não tenho certeza se esse padrão se adapta bem. Mas se você pudesse projetar uma arquitetura adequada, o padrão Mediador pode ser uma base sólida.


4

Você pode fazer com que o método principal exiba um JDialog. Quando a caixa de diálogo é fechada, o JFrame principal é criado e exibido.

O JDialog fornece métodos estáticos fáceis de usar que exibem uma caixa de diálogo com conteúdo e botões personalizados e retornam o código do botão que foi clicado. Ao testar esse valor, seu método principal pode decidir exibir o quadro principal ou sair (ou qualquer outra coisa). Por favor, leia o Javadoc.

Ao contrário de algumas estruturas de interface do usuário mais antigas, um aplicativo Swing não está vinculado a um quadro ou janela específico. Você pode criar quantas janelas quiser. O aplicativo termina quando todos os threads terminam, não quando todas as janelas foram descartadas. Isso geralmente é alcançado com System.exit (0).

Não sei se existe um padrão de design específico para esse caso. Eu recomendo o tutorial Java Swing.


11
-1. Esta é uma questão de padrão de design. Recomendar a alteração das especificações que me foram dadas e terminar com "Não sei se existe um padrão de design específico" não responde.
Pops

2
Sua resposta é muito precisa. Você não tem um problema de padrão de design, precisa aprender como os formulários e caixas de diálogo funcionam primeiro.
Alex

2

Muitas estruturas de interface do usuário têm regras diferentes em relação à janela 'principal' ou 'ativa'. Uma maneira de gerenciar essa complexidade é fazer com que sua janela principal, que controla o loop principal da mensagem, seja invisível (ou pequena, sem pixel de 1 pixel, fora da tela para estruturas particularmente irritantes). faça com que todas as outras janelas e diálogos sejam filhos dessa janela.

Esse método tem muitas vantagens, especialmente ao lidar com cliques de teclas globais e eventos de mouse, bem como no registro de nível superior e no tratamento de exceções.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.