comment enregistrer le panneau comme image en balançoire?
Salut, je veux convertir panneau qui contient des composants tels que les étiquettes et les boutons de fichier image.
J'ai fait le code suivant. L'image a été enregistrée. mais le contenu du panneau n'est pas visible ou enregistré. Quelqu'un peut me dire comment faire pour enregistrer le panneau avec ses composants.
Code:
package PanelToImage;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
public class sample extends JPanel {
public JPanel firstpanel;
public JPanel secondpanel;
JLabel label1, label2;
JButton button1, button2;
public sample() {
firstpanel = new JPanel();
firstpanel.setSize(400,300);
firstpanel.setBackground(Color.RED);
secondpanel = new JPanel();
secondpanel.setBackground(Color.GREEN);
secondpanel.setSize(400,300);
label1 = new JLabel("label1");
label2 = new JLabel("label2");
button1 = new JButton("button1");
button2 = new JButton("button2");
firstpanel.add(label1);
firstpanel.add(button1);
secondpanel.add(label2);
secondpanel.add(button2);
saveImage(firstpanel);
add(firstpanel);
//add(secondpanel);
}
public static void main(String args[]) {
JFrame frame = new JFrame();
sample sam = new sample();
frame.setContentPane(sam);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
}
private void saveImage(JPanel panel) {
BufferedImage img = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
panel.paint(img.getGraphics());
try {
ImageIO.write(img, "png", new File("E://Screen.png"));
System.out.println("panel saved as image");
} catch (Exception e) {
System.out.println("panel not saved" + e.getMessage());
}
}
}
source d'informationauteur Babu R
Vous devez vous connecter pour publier un commentaire.
Ce code fonctionne pour moi (dans le
JFrame
):Peut-être que vous avez utilisé des panneaux personnalisés. Si la valeur est true, essayez d'ajouter
super.paint(g)
au début de lapaint
méthodes de vos panneaux.MODIFIER: Vous appelez l'
saveImage
après affichage de l'image:EDIT 2: C'est l'image enregistrée (peu parce que la mise en page, mais c'est la preuve que cela devrait fonctionner):
J'ai appelé le
saveImage
comme le dernier appel dans lemain
et utilisé un fichier à l'utilisateur dir (new File("Screen.png")
) belle vache dit.Ici d'essayer ce programme d'exemple, au lieu d'utiliser
getGraphics()
semble que vous ayez à utilisercreateGraphics()
pour laBufferedImage
vous êtes sur le point de faire.