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 JFrame
como 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.)
fonte
Respostas:
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.
fonte
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.
fonte
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.
fonte