Olá,
gostaria de saber pq ao atualizar ou redimensionar a janela(frame) que contém um painel de desenho ao qual possui desenhos preenchidos com o método .fill…(…) desfaz o preenchimento dado aos mesmos?
eu utlizo o seguintes comandos para atualização da janela:
Janela.this.getContentPane().validate();
Janela.this.getContentPane().repaint();
gostaria de saber se há como atualizar a Janela(frame) sem interferir no preenchimento??
depois de fazer a atualização através destes comandos que citei acima eu tentei utilizar um procedimento que preenche todas as figuras novamente mas ele não volta a preencher as figuras no painel de desenho, so ficam as formas geométricas dos métodos draw…(…) desenhadas, mas sem nenhum preenchimento, alguém sabe como resolver este problema??
fox-news
Você poderia ter postado o código com problema. É difícil ficar tentando adivinhar o que está errado sem saber o que você fez.
Segue um exemplo de fill dentro de um JPanel dentro de um JFrame. Nem o revalidate() nem o repaint() foram necessários:
[code]
import javax.swing.;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.;
public class DPanel extends JFrame {
public DPanel() {
setPreferredSize(new Dimension(300, 300));
setSize(getPreferredSize());
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new Painel());
}
public static void main(String args[]){
new DPanel().setVisible(true);
}
class Painel extends JPanel{
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(Color.BLUE);
Rectangle2D rect = new Rectangle2D.Float(10, 10, 200, 200);
g2.fill(rect);
g2.dispose();
}
}
}[/code]
Abraço.
O Swing não tem qualquer obrigação de salvar a informação que foi desenhada na tela.
Para que a tela seja desenhada, você deve sobrescrever o método paint (se estiver criando um filho de JWindow) ou o método paintComponent, como no exemplo do post anterior, se estiver criando um filho de JComponent.
Para entender melhor o ciclo de pintura, leia:
http://pontov.com.br/site/java/47-javageral/92-conhecendo-o-jframe
Obrigado TerraSkilll e ViniGodoy pela ajuda, eu consegui resolver o problema,o erro era que ao atualizar/redimensionar uma janela(JFrame) o método herdado paint é disparado automaticamente, e portanto caso vc queira que os desenhos que vc pintou na tela pelos metodos .draw…(…) ou .fill…(…) permaneçam ali vc deve sobreescrever esse metodo paint, vc deve codificar esse metodo para refazer todas as pinturas que ja estavam na tela anteriormente, eu estava criando um metodo chamado preencher e chamava o metodo preencher sempre que atualizava a janela, mandando ele refazer o preencheenchimento de todas as figuras que estavam armazenadas no meu array list de figuras, mas acontece que so vai funcionar se o código de preencher todas as figuras estiver dentro desse método paint, aqui vai o meu códido do método paint:
public void paint (Graphics g)
{
for (int i=0 ; i<figuras.size(); i++)
{
figuras.get(i).torneSeVisivel(g);
figuras.get(i).preencher(g);
}
}
o array list figuras é percorrido e redesenha todas as minhas figuras ja armazenadas pelo método .torneSeVisivel(g) que implementa o .draw…(…) e preenche cada uma delas com suas respectivas cores através do método .preencher(g) que implementa o .fill…(…)