Pessoal, gostaria de saber se é possivel eu “exportar” um JPanel como imagem, isso pode parecer meio doido, mas eu tenho um JPanel com um monte de coisas dentro dele e queria salvar uma imagem desse meu JPanel, não é bem um exportar…ficou estranho, é como dar um “Print Screen” do JPanel, é possível fazer essa loucura?
JPanel como imagem [Resolvido]
15 Respostas
Não entendi.
Por que exatamente você não pode usar o PrintScreen ?
Ve se é isso resolve seu problema…
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
Rectangle screenRect = new Rectangle(screenSize);
try{
robot = new Robot();
}catch(Exception e){
System.out.println("ERRO _ ROBOT");
}
BufferedImage imgcapturada = (BufferedImage)robot.createScreenCapture(screenRect);
SkyWalker, eu gostaria que a minha ferramenta fizesse isso, e não eu :lol:
LuizLG, eu fiz o seguinte, peguei esse código que vc me mandou e criei um novo JPanel passando como argumento para o método paintComponents (Graphics) o que vc me passou, entretanto, não gerou nada. Vc conseguiu fazer funcionar ae?
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
Rectangle screenRect = new Rectangle(screenSize);
Robot robot = null;
try{
robot = new Robot();
}catch(Exception e){
System.out.println("ERRO _ ROBOT");
}
BufferedImage imgcapturada = (BufferedImage)robot.createScreenCapture(screenRect);
JPanel a = new JPanel();
a.paintComponents(imgcapturada.createGraphics());
tab.add(a);
Obrigado pessoal
Sobreescreve o método Paint que dá certo.
Eita… só que agora percebi que assim vai tirar screenshot da tela inteira…Mas talvez se vc passar a localização do jpanel e o tamanho fique certo…
Melhor: dá uma olhada na classe Robot, deve ter como tirar screenshot só do componente!
Vou dar uma olhada tb, qualquer coisa volto =pp
JPanel a = new JPanel(){
public void paint(Graphics g){
Toolkit toolkit = Toolkit.getDefaultToolkit();
// Dimension screenSize = toolkit.getScreenSize();
Point pt = new Point(50,50);
Rectangle screenRect = new Rectangle(pt, screenSize);
Robot robot = null;
try{
robot = new Robot();
}catch(Exception e){
System.out.println("ERRO _ ROBOT");
}
BufferedImage imgcapturada = (BufferedImage)robot.createScreenCapture(screenRect);
g.drawImage(imgcapturada, 20, 20, null);
}
};
Blz Luiz, vou dar uma olhada!
Achei…
Fora do jPanel vc usa o getBounds pra pegar as dimensoes, depois o ScreenCapture, testa ae!
Rectangle r = jPanel.getBounds();
BufferedImage image = new Robot().createScreenCapture®;
Ele ta capturando do tamanho do JPanel, contudo, a localização está errada, tentei passar um getLocation, mas naum funcionou, vou ter que pensa numa solução melhor, que não dependa de uma localização e sim do componente, será que dá?
Obrigado Luiz :lol:
Você tambem tem a opção de ‘imprimir’ em um arquivo direto, ao inves de imprimir na impressora direcionar para um arquivo de imagem. Mas agora não sei qual seu interesse, se é apenas usar no programa mesmo…
A minha idéia é gerar arquivo de imagem com isso, eu tava colocando no JPanel só pra visualizar a imagem. Como posso direcionar para um arquivo de imagem esse BufferedImage (sem querer abusar da sua paciência). Vou procurar…
Obrigado Luiz
Valeu Luiz
:thumbup:
Td funcionando perfeito? xD
Não, pq esse metodo write recebe como argumento um RenderedImage e não um bufferedImage, mas eu vou pesquisar sobre como faz isso, e quanto ao print screen, ainda ta com aquele problema, mas agora acho que é só pensar um pouco, vou dar uma pesquisada, o mais difícil já foi. Posso postar aki quando conseguir,
Valeus
Tudo bem se for chamar o paint para pintar um BufferedImage, como no tópico.
Mas sempre que for sobrescrever no Swing, sobrescreva paintComponent().
O método paint é dividido em três partes:
- paintBorder();
- paintComponent();
- paintChildren().
Sobrescreve-lo pode fazer com que o Java pule uma dessas etapas, gerando um painel de comportamento estranho.
Soh para firmar mais um pouquinho… pois aki tb funcionou direitinho, dessa forma:
int width = jPanel3.getWidth();
int height = jPanel3.getHeight();
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
g2 = image.createGraphics();
jPanel3.paint(g2);
g2.dispose();
RenderedImage img = image;
try {
ImageIO.write(img, "png", new File("mypanel.png"));
}
catch(IOException ioe) {
System.out.println(ioe.getMessage());
}
