Я проводил тщательные исследования стека и других платформ, чтобы найти решение моей проблемы. Я понимаю, что это дублирующий вопрос, и я полностью понимаю, как преобразовать JPanel в изображение на основе учебника по Java и других существующих публикаций.на стеке потокаТем не менее, я пытаюсь сделать это в ООП, так как я не хочу разбивать все мои коды в одном методе.Результат, который я продолжаю получать, пуст, и он не показывает мой компонент в экспортированном файле PNG.
Файл 2, imageOutput.java
public class imageOutput {
public JPanel panel() {
JPanel panel = new JPanel();
JButton btn = new JButton("Click");
JLabel label = new JLabel("Exporting image example");
// -----Add to panel ---
panel.add(label);
panel.add(btn);
panel.setSize(200,200);
btn.addActionListener(new saveImageListener());
return panel;
}
public void frame() {
JFrame frame = new JFrame();
JPanel panel = panel();
// --- Add to frame ---
frame.add(panel);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
class saveImageListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
JPanel panel = new imageOutput().panel();
System.out.println("Step 1.. ");
BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
System.out.println("Step 2.. ");
Graphics2D g = image.createGraphics();
panel.printAll(g);
g.dispose();
try {
ImageIO.write(image, "jpg", new File("Paint2.jpg"));
ImageIO.write(image, "png", new File("Paint2.png"));
System.out.println("save");
} catch (IOException exp) {
exp.printStackTrace();
}
}
}
Основной класс, main.java
public class main{
public static void main(String[] args) {
new imageOutput().frame();
}
}
Когда я запускаю программу, она становится пустой, как упомянуто выше.Я пытался выяснить, в чем причина этого на прошлой неделе, и я не нашел никакого решения.Кто-нибудь сталкивался с этой проблемой и смог ее решить?
НО , когда я делаю это таким образом, это прекрасно.Тем не менее, это не опа для меня.
public void frame() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton btn = new JButton("Click");
JLabel label = new JLabel("Exporting image example");
//-----Add to panel ---
panel.add(label);
panel.add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
BufferedImage image = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
panel.printAll(g);
g.dispose();
try {
ImageIO.write(image, "jpg", new File("Paint2.jpg"));
ImageIO.write(image, "png", new File("Paint2.png"));
System.out.println("save");
} catch (IOException exp) {
exp.printStackTrace();
}
}
});
//--- Add to frame ---
frame.add(panel);
frame.setSize(200, 200);
frame.setVisible(true);
//btn.addActionListener(new saveImageListener());
}
Заранее спасибо.:)