galera, estou querendo criar um joguinho em java2d, na verdade, simular akele Snake dos celulares nokias.
o problema é que nao manjo nadaaa de java2d, estou ate com um livro aqui… mas o exemplos que ele dá, separa as classes( o que é bom, mas por questao de aprendizado gostaria de fazer tudo em uma )
ou seja, ele add no jframe a classe Teste2d que nada mais eh que um JPanel.
como eu faria pra add um objeto 2d ao jframe, sem ter que criar outra classe e nela, herdar um JPanel?
se alguem tiver um exemplo bem simples, de um quadrado que for, ajudaria muito!
Desenvolvi um jogo totalmente em Java 2d e sem nenhum framework em um projeto de uma cadeira do curso. Aprendi muito no site do VinyGodoy, o PontoV. Recomendo muito que siga a trilha de lá.
sobre o metodo paint acima…
pra mim exibi-lo num jframe porexemplo
como eu faria?
jframe.add(paint());?
nao estou conseguindo exibir o graphics2d sem criar uma classe nova e herdar um JPanel
mdea
Você pode sobrescrever o método paint() em um JPanel e adicionar o painel em um JFrame
davi1993
essa seria a unica forma de mecher com java2d? pq pra sobrescrever seria necessario herdar, e para herdar eu teria que criar uma classe nova… our herdar na mesma correto?
no caso toda vez que utilizar java2d teria que criar uma classe nova para herdar um JPanel e sobrescrever o metodo paint()?
vlw!!
mdea
Eu sinceramente não sei se existe alguma outra forma. Mas entendo as suas questões, vamos ver se aparece alguém que conheça alguma outra forma.
tpmarc
Realmente acredito que seja necessário ter um JPanel para desenhar 2d.
E
elissonandrade
Olha, no meu projeto(universo pessoal, na minha assinatura), eu uso uma técnica pouco conhecida e um tanto arriscada, que é a composição misturada com herança inline. Ela funciona, mas deixa o código um pouco confuso.
O ponto forte é que você pode separar os listener’s do Jpanel, algo que geralmente fica junto e que me incomada bastante. Eu to sem o código aqui, mas se tu quiseres eu faço um exemplo.
Olha, no meu projeto(universo pessoal, na minha assinatura), eu uso uma técnica pouco conhecida e um tanto arriscada, que é a composição misturada com herança inline. Ela funciona, mas deixa o código um pouco confuso.
O ponto forte é que você pode separar os listener’s do Jpanel, algo que geralmente fica junto e que me incomada bastante. Eu to sem o código aqui, mas se tu quiseres eu faço um exemplo.
muito interessante essa de herança inline.
poderia deixar um exemplo pra nós?
tbm nao me agrada muito deixar os listeners junto
E
elissonandrade
Funciona mais ou menos assim: primeiro, o argumento onde você cria o JPanel, você faz assim ó:
//digamos que é um atributo da classeJPanelareaDesenho=newJPanel(){protectedpaintComponent(Graphicsg){super(g);//reescreve o método aqui, desenhando o que você quer sem criar outra classe só pra herdar o JPanel :)};
A grande complicação que eu tive em fazer um código assim é que o uso da palavra chave this se torna um pouco ambíguo pro programador.
davi1993
pocha, muito interessante, com alguns ajuste deu certo! vlww mesmo pela ajuda brow!!
nao sabia que dava pra instanciar classe assim, reescrevendo o metodo sem ter que herdar
vlw mesmo!
pra quem tiver a mesma duvida, ai esta
JPaneldesenho=newJPanel(){protectedvoidpaintComponent(Graphicsg){super.paintComponent(g);g.drawString("omg cant believe in it!",10,20);}};qualquerFrame.add(desenho);
E
elissonandrade
pocha, muito interessante, com alguns ajuste deu certo! vlww mesmo pela ajuda brow!!
nao sabia que dava pra instanciar classe assim, reescrevendo o metodo sem ter que herdar
vlw mesmo!
Quando eu comecei o projeto da assinatura(UniversoPessoal), esse problema de ter que herdar me desanimou logo de cara. Mas, num livro aí eu vi essa técnica implícita. Ela também é ideal para criar Action listeners sem ter que crias várias classes muitas vezes pra serem usadas só uma vez. É impressionante o numero de coisas que existem em java que nem as apostilas ou os cursos mencionam.
Uma última recomendação é que você não use o objeto g diretamente, mas mande-o para um método externo, tipo:
//digamos que é um atributo da classe JPanelareaDesenho=newJPanel(){protectedpaintComponent(Graphicsg){super.paintComponent(g);fazDesenhos(g);//isso nunca vai ser alterado!};voidfazDesenhos(Graphicsg){g.drawString("omg cant believe in it!",10,20);//modifique como quiser essa parte}
Assim, fica mais limpo e mais fácil de se fazer manutenção!!