Colocar Canvas dentro de um JPanel [RESOLVIDO]  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Boa noite galera!

Alguém ja fez alguma "firula" usando canvas e depois colocou em um JPanel?

Fiz um relogio digital com aparencia de display de calculadora usando canvas. Agora preciso colocar em um JPanel, ja rodei a net toda e nada.... so consigo colocar dentro de um JFrame ou JDialog, containers do tipo janela, mas preciso colocar dentro de um jpanel.

Alguém?

Vlw gente!

This message was edited 1 time. Last update was at 28/06/2010 19:27:52


"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Você não deve misturar AWT e Swing. Sobrescreva o método paintComponent do JPanel, ou do JComponent, e transfira o código do relógio para lá.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Ow... vlw vini, como sempre, vc me ajudando... ^^
Aproveitando o embalo, porque nao se deve misturar awt com swing? Apenas pela organizacao no quesito "ser puramente uma api só" ou algo relacionado a performace?

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Não, o problema é mais embaixo. Está relacionado a forma que os componentes trabalham.

A AWT tenta fazer janelas usando recursos do SO. Quando você desenha um botão, a AWT usa a API do Windows para desenhar um botão. O mesmo vale para qualquer outro componente. Isso é chamado de componente "heavy weight" (pesado).

O Swing não trabalha assim. Ele cria um único canvas, acelerado por hardware, e após isso, faz ele mesmo o desenho usando java 2D. Esse desenho é feito usando alguma biblioteca de pintura acelerada, como OpenGL ou, no caso do Windows, DirectX. No Swing, quando um botão é desenhado, ele é efetivamente pintado sobre o painel, não há a criação de componentes do Windows adicionais. Por isso, ele também consome menos recursos do SO, e é chamado de "light weight" (leve).

Quando vc mistura as duas coisas ocorrem alguns efeitos indesejados:
1. Todos os componentes da AWT ficam SOBRE os componentes do Swing. Isso pq o botão é um componente da GDI, que está sobre o canvas, e os componentes do Swing são a "pintura" desse mesmo canvas;
2. Eventos podem se perder. A captura dos eventos dos componentes da AWT não é propagada para os componentes Swing;
3. Não é possível usar componentes como o JScrollPane sobre componentes da AWT.
4. Layout managers também não funcionam como deveriam.

Esse artigo explica em detalhes essas situações: http://java.sun.com/j2se/1.3/docs/guide/awt/designspec/lightweights.html

Para pintar no Swing, substitua a classe Canvas pela classe JComponent. Se precisar de um componente que suporte outros em cima dele, faça um filho de JPanel. E lembre-se que no caso do Swing o método que deve ser sobrescrito para pintura é o paintComponent, não o método paint.

This message was edited 2 times. Last update was at 28/06/2010 09:00:45


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
gqferreira
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2008 17:38:10
Mensagens: 572
Localização: Indaiatuba/SP
Offline

Bacana vini... entendi bem e ja consegui fazer meus "brinquedinhos" em canvas funcionarem... ^^
A proposito, vc lessiona? Sabe explicar com tanta clareza...

Vlw vini, um abraco!

"Se eu tiver uma maçã e você também tiver uma maçã, e trocarmos de maçãs, cada um ficará com uma maçã. Se eu tiver uma ideia e você também tiver uma ideia, e trocarmos ideias, cada um ficará com duas ideias."
George Bernard Shaw

Gustavo Quirino Ferreira
[WWW] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

gqferreira wrote:Bacana vini... entendi bem e ja consegui fazer meus "brinquedinhos" em canvas funcionarem... ^^
A proposito, vc lessiona? Sabe explicar com tanta clareza...


Sim, sou professor da pós-graduação em jogos digitais da PUC/PR.
E do curso de Superior de Tecnologia em Jogos da PUC também.

Mas em nenhum deles dou aula de Java.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team