java - Como executar uma aplicação Java Swing em uma só janela ?
Perguntas � java � Como executar uma aplicação Java Swing em uma só janela ?
Como executar uma aplicação Java Swing em uma só janela ?
Boa noite galera, estou desenvolvendo uma aplicação Java Swing, mais estou com dificuldade num quesito.É o seguinte: toda vez que uma tela é chamada, uma janela (Frame) é criada, mas não é muito elegante um programa ficar executando varias janelas uma em cima da outra. Queria saber uma forma de toda vez que uma tela for chamada, apenas o conteúdo da janela fosse substituído e não uma nova janela fosse criada. Ou seja, todo o programa ficava executando somente numa janela, mudando apenas o conteúdo da mesma, quando solicitado. Alguém aí poderia me dizer como fazer isso.
editado 19 de jan de 2015
Galera, obrigado a todos pela atenção e ajuda de vocês. Mas resolvi mudar o design da minha aplicação, pois achei que como estava não era muito prático. Então resolvi usar "JTabbedPane" e assim toda a navegação se dar por meio de abas. dessa forma não tenho mais o problema de múltiplas janelas, assim como a aplicação ficou mais elegante e usual. Obrigado !
Usar JTabbedPane vai fazer com que todas as abas sejam carregadas no momento em que instanciar a classe Frame que está por fora dela....Se vc não tem problemas com uso de recursos da máquina é uma saída mais rápida.
— goncalvesdiogo 21 de jan de 2015
Estou ligado nisso, mais como a aplicação é pequena, acho que não vai ter problema. Mas obrigado pela informação !
— Ivanildo Bandeira 21 de jan de 2015
Use jpanel e deixe ele invisível depois você pode deixar ele visível e os outros não . Tipo quando você precionar o botão ai você faz essa função .
Assista essa playlist aqui, o cara ensina a trabalhar com isso.
https://www.youtube.com/watch?v=digi6_l46NY&list=PL-ggex5I8kZhAC3DLGEwBoO5b9JJ4-kZA
Amigo, apenas tome cuidado com o tamanho do Sistema que você pretende fazer isso. Colocando tudo em uma só janela, você, na primeira vez carregará todos os objetos do Sistema e eles ficarão em memória pra sempre.
Quando você carrega um Frame e o "mata", você deixa o Java fazer a sua parte e limpar a sujeira da memória. Trazendo tudo de uma só vez, isso ficará forever em sua memória, de forma que os Objetos nunca serão desalocados, a menos que você trabalhe com criação e destruição dos panels e de cada um dos seus elementos a cada chamada e renderização, o que faria com que a responsabilidade pela limpeza ficaria com você. Lembrando que isso depende apenas do tamanho do Sistema, ou seja, não é um impeditivo, mas sim apenas um aviso.
Você já pensou em utilizar JInternalFrame? Este componente é exatamente para abrir "formulários" internos na aplicação.
Porem, ele apresenta um layout bem diferente do padrão conhecido pelos usuários. Em um sistema swing que trabalhei, acabei criando uma classe que efetua um extends de JPanel. Nesta classe, eu implementei todos os comportamentos desejados para que este JPanel se comportasse como um frame interno na aplicação (close, open, etc)...e integrei os mesmos com meu JFrame principal da aplicação.
Depois disso efetuado, todos os casos de uso que necessitam de um novo formulário são filhos desta classe, e herdam os comportamentos pré-concebidos pelo pai.
bem... é uma idéia, para meu caso atendeu!
Geninho Carlos
Crie uma tela de MENU a qual irá chamar todas as outras telas, a tela de Menu fica invisível enquanto a tela sendo executada fica ativa, no botão de fechar vc coloca um "this.dispose();" pra fechar a tela e seta o objeto "menu" pra visible novamente.
//Botão na tela MENU
new Tela1(this);
Lógico que pra vc conseguir fazer isso, toda vez que instanciar uma tela vc precisa passar o objeto "menu" como parâmetro no construtor.
public Tela1() {
public Tela1(Menu menu) {
Ai pra voltar a tela de menu:
this.menu.setVisible(true);
goncalvesdiogo
Cara, desculpe, mas não estou entendendo direito...O codigo para esconder a janela e deixa-la visivel novamente fica tudo dentro do mesmo "ActionPerformed". Não tem que ter nenhum if ou while ai não ? Coloquei tudo junto mais deu erro.
— Ivanildo Bandeira 20 de jan de 2015
Ivanildo Bandeira, eu apenas fiz um exemplo onde existem a Tela de Menu com o botão que chama a Tela1. No exemplo o action do botão da tela de Menu instancia um novo objeto da classe Tela1, e em seguida esconde a tela de Menu. No construtor da classe Tela1, que é chamado toda vez que um objeto dessa classe é chamado, ele recebe o objeto Menu como parâmetro e guarda em uma variável acessivel pela classe Tela1, apenas para que vc possa controlá-la depois no momento de voltar pra tela anterior. A função de voltar simplesmente exibe novamente a tela de menu e descarta a instancia Tela1.
Você pode fechar uma janela assim que outra for aberta, com o método dispose(). Por exemplo, se você criou uma janela nova em resposta a alguma coisa que aconteceu no menu,