Witam Chcę przekonwertować panel, który zawiera komponenty takie jak etykiety i przyciski do pliku obrazu.jak zapisać panel jako obraz w ruchu?
Wykonałem następujący kod. Obraz został zapisany. ale zawartość panelu nie jest widoczna lub zapisana. Czy ktoś może mi powiedzieć, jak zapisać panel za pomocą jego komponentów.
Kod:
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());
}
}
}
patrz [ComponentImageCapture.java] (http://stackoverflow.com/a/5853992/418556) do wyświetlania widocznych części - przewijania dla ** Patrz również ** & Klasa Roba Camick że zajmuje wiele pracochłonnych prac polega na zrobieniu obrazu ze składnika, który nie został wyświetlony. I niektóre z innych sztuczek do renderowania komponentów przed wyświetlaniem można zobaczyć w [Dlaczego nagłówek JTable nie pojawia się w obrazie?] (Http://stackoverflow.com/q/7369814/418556) –
Wydaje mi się, że jesteś podanie niewłaściwej 'Path' dla pliku, który ma zostać utworzony. Ponieważ Twój Program nic nie wie o tym, czym jest "Dysk E", więc nowy "Plik", który zostanie utworzony, musi mieć odniesienie do 'Względnej Ścieżki' w odniesieniu do' .Pliku pliku', np. '... . \ E: \ Screen.png', sprawiając, że idzie o dwa poziomy wyżej, a następnie dociera do 'Drive E', coś podobnego będzie działać. Obraz tak utworzony z moją odpowiedzią lub odpowiedzią @Alberto jest tworzony obok pliku .class. –