Word em Java

lopesrb

Membro
Boas pessoal!
Eu estava a tentar fazer uma espécie de word em java!
Estava tudo a correr muito bem até que decidi criar um botao ( "Novo") que abre outra janela igual á primeira!

Só que o problema surge quando fecho uma janela, pois ao fechar uma todas as outras desaparecem tbm!

Basicamente o eu fiz foi adicionar um actionlistener ao botao "Novo" em que o que ele simplesmente faz é criar outra classe (a mesma em k ele está, ou seja new Main() )!

Se me pudessem ajudar com este problema agradecia!

Desde mais obrigado! ;)
 
suponho que estejas a defenir o setDefaultCloseOperation como Exit on close e estejas a usar um jframe = quando crias o novo. A tua janela principal pode usar Exit_on_close mas as outras devem usar o default que é esconder o JFrame.

cumps
 
Basicamente eu criei uma classe Main em k define toda a janela com a area de texto e menu!
no metodo ...void static main(...) eu faço apenas Main Janela= new Janela()!

Akilo que disseste sobre usar o default resolve de certa forma o problema mas ainda fico com um!
se eu fechar a principal ela vai fechar as outras todas!

o k eu keria é k só a ultima independentemente de qual fosse fechasse o programa!( executasse o exit_on_close )
 
Fica no JFrame! Num menu que fiz!

Basicamente fiz isto:

JFrame​
janela;

JMenuBar menuBar;
...

menuBar = new JMenuBar();
janela= new JFrame();

novo=new JMenuItem("Novo");novo.addActionListener(this);

...
menuBar.add(ficheiros);
ficheiros.add(novo);
janela.setJMenuBar(menuBar);

....

 
Eu recomendo-te fazer o seguinte:
1) crias uma nova classe que deriva de JFrame e passas a usar essa em vez de JFrame (vou chamar-lhe Janela, para o exemplo)

2) em Janela declaras um atributo privado e estático do tipo int, que vai contar quantas instâncias de Janela existem (chamemos-lhe numJanelas)

3) em Janela implementas o construtor de tal modo que a variável numJanelas seja incrementada uma unidade cada vez que for criada uma instância

4) implementa um listener para o evento (windowClosed) que é lançado quando se fecha um JFrame de modo a que a variável seja decrementada uma unidade. O método do listener deve também verificar se numJanelas == 0 e nesse caso deve terminar o programa (System.exit(0)).

5) envolve a incrementação e decrementação num bloco synchronized, pelo sim pelo não, para proteger o acesso concorrente à variável numJanelas
 
Eu recomendo-te fazer o seguinte:
1) crias uma nova classe que deriva de JFrame e passas a usar essa em vez de JFrame (vou chamar-lhe Janela, para o exemplo)

2) em Janela declaras um atributo privado e estático do tipo int, que vai contar quantas instâncias de Janela existem (chamemos-lhe numJanelas)

3) em Janela implementas o construtor de tal modo que a variável numJanelas seja incrementada uma unidade cada vez que for criada uma instância

4) implementa um listener para o evento (windowClosed) que é lançado quando se fecha um JFrame de modo a que a variável seja decrementada uma unidade. O método do listener deve também verificar se numJanelas == 0 e nesse caso deve terminar o programa (System.exit(0)).

5) envolve a incrementação e decrementação num bloco synchronized, pelo sim pelo não, para proteger o acesso concorrente à variável numJanelas


Funciona :D
Obrigado nfh ;)

Só mais uma coisa! O eclipse obriga-me a meter lá os outros eventos como o windowActivated e os outros! Não há maneira d não meter isso no código?

É que não preciso de meter lá nada dentro
 
Não sei muito bem como o Eclipse funciona, porque já há imenso tempo que passei a usar o NetBeans.

De qualquer modo, se tens noção do que é um listener, então em vez de implementares directamente a interface WindowListener (que é a que tem o método windowClosed), implementa uma classe que derive de WindowAdapter.
A classe WindowAdapter tem todos os métodos de WindowListener (e outras interfaces relacionadas com eventos de janelas) implementados com corpo vazio ( { } ). Desse modo só tens de fazer o override dos métodos que te interessam.

No fim vai dar ao mesmo (porque na herança de classes há uma - WindowAdapter - que vai ter esses métodos vazios), só que para ti (programador) é mais fácil se usares a WindowAdapter.
 
Já agora, define a acção de close (defaultCloseOperation) para fazer o dispose do ecrã. Se não fizeres isso, quando a janela é fechada ela permanece em memória, ainda que não esteja visível. O new Janela() apenas faz com que seja criada mais uma janela em memória, pelo que podes julgar que tens apenas uma janela em memória num dado momento, mas na realidade tens 2 ou mais.
 
Ok! Feito ;)

Por acaso tambem não sabes como abrir aquela caixinha do Windows para abrir um ficheiro!
Eu consigo! Mas aquilo fica tudo em ingles e não se parece em nada com a que é apresentada no windows! :s
 
Back
Topo