Interseptar o botao fechar

:?:
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 {
^

//Frame2.java
import java.awt.;
import java.awt.event.
;

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.

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
{
     public JFrame frame;

      public Teste()
      { 
            frame = new JFrame();
            frame.addWindowListener(new WindowListener()
            {
                 public void windowClosing(WindowEvent e)
                 {
                     System.exit(0); //ou o comando que quiser
                  }
             });

              frame.setSize(300,300);
              frame.setTitle("Testando JFrame");
              frame.show();
      }
     
        public static void main(String args[])
        {
               Teste teste = new Teste();
        }
}

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…

Ola,

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

[]'s

richardpeder,

Qual o problema em estender JFrame ?

[]´s

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

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

wiliams1…

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

falow

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:

caro amigo…

o erro estah aqui…

frame.addWindowListener(new [b]Window[/b]Listener() 

deve ser:

frame.addWindowListener(new [b]window[/b]Listener() 

falow

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:

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

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…

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
{
     public JFrame frame;

      public Teste()
      {
            frame = new JFrame();
            frame.addWindowListener(new WindowAdapter()
            {
                 public void windowClosing(WindowEvent e)
                 {
                     System.exit(0); //ou o comando que quiser
                  }
             });

              frame.setSize(300,300);
              frame.setTitle("Testando JFrame");
              frame.show();
      }
     
        public static void main(String args[])
        {
               Teste teste = new Teste();
        }
}

abraços…

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]

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…

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[];

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!!!

Obrigado … :slight_smile:

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!!!

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!!!

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.