Interseptar o botao fechar

19 respostas
W

:?:
Galera to começando agora com auxilio do livro Introdução ao java (Peter Jandl Junior editora Berkeley) Tem este exemplo ai em baixo que não consegui rodar não sei se foi as horas que que passei na frente do computador mas se alguem pude aponta o erro pra min eu agradeço.

O erro e o seguinte:
C:codigosFrame2.java:5: Frame2 should be declared abstract; it does not define windowOpened(java.awt.event.WindowEvent) in Frame2
public class Frame2 extends Frame implements WindowListener {
^

<a href="//Frame2.java" class="onebox" target="_blank">//Frame2.java</a>

import java.awt.<em>;

import java.awt.event.</em>;
public class Frame2 extends Frame implements WindowListener {

public Frame2() { //construtor

setTitle(Demonstração de Frame #2”); //titulo

setBounds(50, 50, 320, 160); //posicao e tamanho

addWindowListener(this);	 //registro de listener

}

// interface windowslistener

public void windowClosing(WindowEvent e) {

System.exit(0);

}

public void WindowClosed(WindowEvent e) {}

public void WindowIconified(WindowEvent e) {}

public void WindowOpened(WindowEvent e) {}

public void WindowDeiconified(WindowEvent e) {}

public void WindowActivated(WindowEvent e) {}

public void WindowDeactivated(WindowEvent e) {}
public static void main(String args[]) {
		new Frame2().show(); //instanciacao e exibicao
	}
}

so assim nao consegui compilar, Com uma classe anônima interna eu consegui.
e implementando explicitamente WindowAdapter em uma classe separada tambem.

19 Respostas

richardpeder

wiliams…vou te dar uma dica…ao inves de herdar um JFrame, pq vc nao cria o JFrame dentro da classe…

import javax.swing.*;

public class Teste
&#123;
     public JFrame frame;

      public Teste&#40;&#41;
      &#123; 
            frame = new JFrame&#40;&#41;;
            frame.addWindowListener&#40;new WindowListener&#40;&#41;
            &#123;
                 public void windowClosing&#40;WindowEvent e&#41;
                 &#123;
                     System.exit&#40;0&#41;; //ou o comando que quiser
                  &#125;
             &#125;&#41;;

              frame.setSize&#40;300,300&#41;;
              frame.setTitle&#40;"Testando JFrame"&#41;;
              frame.show&#40;&#41;;
      &#125;
     
        public static void main&#40;String args&#91;&#93;&#41;
        &#123;
               Teste teste = new Teste&#40;&#41;;
        &#125;
&#125;

Vc entendeu?? eu usei um JFrame para interceptar a janela, melhor do que herdar…eu acho e uso assim…
obs: não sei se o código funciona, quis passar a idéia, mas se caso quiser que esse código funcione e caso ele não funcione, de um alô ok? :wink: …eh que fiz de cabeça… :lol:

Espero ter ajudado…

ate mais…

mlopes

Ola,

Os seus métodos estão começando com W maiúsculo!! Ai está o erro.

[]'s

LN2EE

richardpeder,

Qual o problema em estender JFrame ?

[]´s

R

concordo com o leandronardo…

nao vejo problema algum em criar uma classe estendendo direto do JFrame…
assim vc utiliza, talvez, a maior vantagem do java…o conceito de heranca entre classes, oq facilita mto a vida dos programadores…

falow

W

mlopes

Valeu amigo erra so W mesmo

richardpeder
Nao consegui roda o codigo.
a mensagem de erro é:

Teste.java:10: connot resolve symbol
symbol : class WindowListener
location: class Teste
frame.addWindowListener( new WindowListener()
O “^” aponta para o “W” do WindowListener apos o “new”
abraço

R

wiliams1…

o erro do codigo do richardpeder tb eh o W q estah maiusculo e deve ser minusculo…

falow

W

Galera sei que é dificil mas…

no codigo do richardpeder nao consegui identifica qual W q tah maiusculo que deve ser mudado para  minusculo

se é aqui:

frame.addWindowListener(new WindowListener()

ou aqui:

public void windowClosing(WindowEvent e)

brigrado. :oops:

R

caro amigo…

o erro estah aqui…

frame.addWindowListener&#40;new &#91;b&#93;Window&#91;/b&#93;Listener&#40;&#41;

deve ser:

frame.addWindowListener&#40;new &#91;b&#93;window&#91;/b&#93;Listener&#40;&#41;

falow

richardpeder

amigo nardo…não vejo problema algum em usar o extends do java…como o rbarioni disse, herança em java é de grande utilidade para os desenvolvedores…apenas uma questão de uso pessoal mesmo…estou acostumado a criar um JFrame dentro da classe…sei lá, vai de gosto…as vezes estendo tb…mas pessoalmente prefiro usar o objeto…Dai vai de gosto…!!! :wink:

ate mais amigos… :smiley:

LN2EE

Realmente, so que falar para um usuario iniciante, que é melhor não estender a algum componente, vc esta falando para ele fugir de um dos principais conceitos de OO.

[]´s

richardpeder

nardo…dai acho que vai da pessoa…se ele quer estender, ele estende, senão ele usa um objeto do tipo JFrame…na verdade, nao tem como ele fugir dos principios de OO, pois a linguagem Java é permanentemente Orientada a Objetos…por isso, ele querendo ou não, irá usar conceitos de OO…expressei uma opinião minha…eu ja sei o que eh herança e ele com certeza saberá tb…nessa ele nao usa, na próxima ele pode usar… :wink:

ate mais…

C

Eu não costumo escrever muito aqui pro fórum, mas essa discussão entre vcs me chamou a atenção. Principalmente pq vcs se esqueceram do principal da mensagem que era pq o código do richardpeder não funcionava, e devem ter deixado ele ainda mais confuso, porque a única resposta que ele teve estava errada.

rbarioni, classes e interfaces, por padrão, devem começar com letra maiúscula, e portanto a sua sugestão não está correta, o nome correto da interface é mesmo WindowListener. O que faltou foi importar o pacote java.awt.event.

Além disso, seria necessário implementar todos os outros métodos da interface WindowListener, e não só o windowClosing, e por isso pode ser mais interessante utilizar a classe WindowAdapter, que implementa todos os métodos de WindowListener, mas não faz nada em nenhum.

import javax.swing.*;
import java.awt.event.*;

public class Teste
&#123;
     public JFrame frame;

      public Teste&#40;&#41;
      &#123;
            frame = new JFrame&#40;&#41;;
            frame.addWindowListener&#40;new WindowAdapter&#40;&#41;
            &#123;
                 public void windowClosing&#40;WindowEvent e&#41;
                 &#123;
                     System.exit&#40;0&#41;; //ou o comando que quiser
                  &#125;
             &#125;&#41;;

              frame.setSize&#40;300,300&#41;;
              frame.setTitle&#40;"Testando JFrame"&#41;;
              frame.show&#40;&#41;;
      &#125;
     
        public static void main&#40;String args&#91;&#93;&#41;
        &#123;
               Teste teste = new Teste&#40;&#41;;
        &#125;
&#125;

abraços…

W

crolmos
Agora consegui rodar o cadigo do richardpeder.

me digao uma uma coisa quando voces começarao com java voces primeiro dominarao OO para dai passar pra awt, swing ou foi paralelo.[/b][/code]

richardpeder

wiliams…na verdade, vc deve primeiramente ver conceitos de OO…nao tem como fugir disso, pois Java é Orientado a Objetos e vc nao poderá fugir disso…em relação ao awt, atualmente utilizamos mais o swing, mas por ex, naquele código que te passei, fazemos o import da classe de eventos do awt para implementar o ouvinte…em relação a frame e tal estamos usando o swing…então, acredito, que primeiramente vc deve aprender OO, não tem como ser diferente…eu acho… :wink: …depois, caso queira, vc estuda a GUI do java e aí vc escolhe entre awt e swing…minha opinião: uso swing!! :lol:

Ate mais…

dukejeffrie

Eu acho que se vc vai aprender OO, nada melhor do que usar Java para colocar a mão na massa.

Em qq livro de OO tem exemplos e pseudo-código.

É mais fácil entender a sintaxe e poder fazer coisinhas bobas no java antes de partir pra conceitos de OO. OO é bem mais difícil.

Fora que segundo meu professor de POO da faculdade, Vc aprender a programar direito orientado a objetos “programando errado e tendo alguém pra te corrigir até que uma hora sai direito”…

Por isso que eu digo: refactor, refactor. Troque tudo. Embrace Change, como diz o pessoal de extreme programming. Vai ter uma hora que vc vai olhar isso:

int ints&#91;&#93;;

e vai querer desmaiar.

Até lá, aprenda um conceito de cada vez, dos quais o mais importante é polimorfismo. Esse é bem na média de dificuldade, é um conhecimento valioso, e te abre a cabeça pros outros.

[]s do duke!!!

A

Obrigado … :slight_smile:

cesarRasec

ola pessoal tudo bom??

bom eu usei este exemplo de voces e funcionou quase perfeitamente, so tem um probleminha quando eu fecho,

a janela ele ta fechando todo o sistema e não apenas a que era pra ser fechada…

alguma dica?? abrigado a todos!!!

cesarRasec

ola pessoal tudo bom??

bom eu usei este exemplo de voces e funcionou quase perfeitamente, so tem um probleminha quando eu fecho,

a janela ele ta fechando todo o sistema e não apenas a que era pra ser fechada…

alguma dica?? abrigado a todos!!!

Tchello

Pessoal, a discução que rolou sobre herança é por que é um recurso escaço.
Não recomenda-se utilizar herança por que isso “engesa” a sua arquitetura, além de você gastar um recurso raro e muitas vezes desnecessário.
Há muitas discuções aqui no GUJ sobre isso, recomendo uma breve pesquisa e leitura.
Não é apenas por que a linguagem/tecnologia lhe permite que significa que em todos os casos deve ser utilizado.
Pra tudo se tem um meio mais adequado e de terminar qual meio será esse dependerá do contexto, não há regra única(famoso: não existe bala de prata).

Abraços.

Criado 26 de março de 2003
Ultima resposta 23 de jul. de 2009
Respostas 19
Participantes 10