:?:
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 {
^
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? …eh que fiz de cabeça… :lol:
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…
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
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)
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…!!!
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.
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…
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();
}
}
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… …depois, caso queira, vc estuda a GUI do java e aí vc escolhe entre awt e swing…minha opinião: uso swing!! :lol:
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.
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).