Salve Galera !!!
Estou fazendo um applet que permite abrir e/ou criar partidas em formato PGN. A grande dúvida é a seguinte:
Tenho o tabuleiro desenhado a esquerda da tela e no lado direito, gostaria de posicionar alguns TextFields e Botões para a entrada de dados.
O problema é que quando dou um add(textfield); add(botao) no método init, os objetos não aparecem. Estão lá, mas não aparecem.
O curioso é que quando passo o mouse sobre a área onde eles deveriam estar, eles passam a ser exibidos. Quando a tela é redesenhada ou redimensionada, eles tornam a desaparecer.
A única maneira que consegui (até agora) para deixá-los na tela o tempo todo foi a seguinte:
No método que pinta do tabuleiro eu faço
1.desenha no buffer o tabuleiro
2.botao.repaint(); textfield.repaint();
3. jogar o buffer para a tela
4. dar um repaint() na tela
Provavelmente estou bisonhando em alguma coisa, mas ainda não descobri no que e pq.
Existe uma maneira melhor de fazer isso sem ter que dar um repaint em cada componente?
(Já tentei colocar em um Jpanel só que ele cobre a tela toda e o Tabuleiro fica por baixo)
Valeu!
[]
Só uma perguntinha boba. Você está usando AWT puro ou também Swing (JApplet, JButton etc.?)
Ambos. Por algum motivo que não lembro mudei de Japplet para Applet. Algumas outras coisas eu uso do AWT.
Mas os componentes de tela estou usando Swing.
Seria esse o problema?
Não; só queria saber como é que foi estruturada sua applet.
É que normalmente eu faria assim:
a) Se você estiver usando Swing, nunca redefina o método paint. Em vez disso, faça sempre o seguinte:
- Crie uma classe que tem apenas o desenho do tabuleiro, E MAIS NADA. Digamos que ela se chame Tabuleiro, para simplificar minha explicação.
Essa classe deve derivar de JPanel.
- Nessa classe Tabuleiro, sobreponha o método paintComponent para desenhar o tabuleiro.
- Agora, para desenhar sua applet, crie uma JApplet (que é mais ou menos a mesma coisa que um JFrame, só que para applets), posicione essa classe Tabuleiro no local adequado, assim como os botões e textfields.
Você viu que é melhor dividir as tarefas; isso também vai deixar seu programa muito mais rápido, porque cada objeto é que tem a incumbência de se redesenhar e você não vai ter que ficar fazendo essa gambiarra de ficar chamando “repaint” e outras coisas mal-cheirosas. (Alguns métodos são “mal-cheirosos” porque se você os estiver chamando, deve haver algum problema. )
Blz Thingol !!!
Vou tentar fazer asim pra ver se resolve.
Porém o repaint do tabuleiro continuará tendo que ser chamado toda vez que uma jogada for efetuada.
:thumbup:
[quote=Felipe3D]Blz Thingol !!!
Vou tentar fazer asim pra ver se resolve.
Porém o repaint do tabuleiro continuará tendo que ser chamado toda vez que uma jogada for efetuada.
:thumbup: [/quote]
Nesse caso faz sentido, já que os dados foram alterados.
Salve Thingol !!!
Salve Galera !!!
Eu fiz do jeito que vc falou e realmente funcionou !!!. SHOW!
Porém, a vida é uma caixinha de surpresas…
Resolvi dar uma melhorada no layout da seguinte forma:
1.Colocar um JPanel chamado “main” no JApplet. ( … this.setContentPane(main) … )
2. Dentro de “main”, colocar o ChessBoard (que extende JPanel) a esquerda.
3. Dentro de " main" colocar um JPanel para a entrada de dados a direita.
No passo 2 já dá o antigo problema de não aparecer o conteúdo do Painel.
- Eu crio o painel main.
- Crio o painel ChessBoard do jeito que vc recomendou
- Adiciono o ChessBoard no main
- Dou um setContentPane(main) no JApplet
O Curioso é que se eu mandar desenhar algo no paintComponents do painel “main” funciona. Mas ele não invoca o repaint() do chessBoard. Mesmo eu adicionando a linha de chamada. chessboard.repaint()
Onde estou errando dessa vez?
Valeu galera !!!