我有这个JPanel列表,我想保存它们而不显示它们
生成Jpanel->保存(不显示)
我尝试使用BuffereImage并将其绘制,但返回的图像始终为黑色,我使用的方法是“保存”,并显示在下面的代码中。
我想知道如何解决这个问题。
编辑:
@camickr感谢您的建议和此帖子
Why does the JTable header not appear in the image?
我已经解决了这个问题,下面是修复的代码:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class Solution extends JFrame
{
int i;
ArrayList <Individual> AKA;
Container jgraph;
JButton gauche;
JButton droite;
JMenuBar barre;
JMenu fichier;
JMenuItem enregistrer;
JPanel jpgenerale ;
Solution current;
Component middle;
public Solution(ArrayList <Individual> graph) throws HeadlessException
{
setDefaultCloseOperation(EXIT_ON_CLOSE);
barre = new JMenuBar();
fichier = new JMenu("Fichier");
enregistrer = new JMenuItem("Enregistrer");
enregistrer.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_DOWN_MASK));
fichier.add(enregistrer);
barre.add(fichier);
AKA = graph;
current = this;
gauche = new JButton("Gauche");
droite = new JButton("Droite");
getContentPane().setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.PAGE_END;
c.gridx = 1;
c.gridy = 2;
gauche.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(java.awt.event.ActionEvent e)
{
i = (AKA.size() + (i - 1)) % AKA.size();
jpgenerale.removeAll();
jpgenerale.validate();
jpgenerale.add(AKA.get(i).chopper.getContentPane());
jpgenerale.revalidate();
jpgenerale.repaint();
}
});
getContentPane().add(gauche, c);
c.gridx = 3;
c.gridy = 2;
droite.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(java.awt.event.ActionEvent e)
{
i = (i+1)% AKA.size();
jpgenerale.removeAll();
jpgenerale.validate();
jpgenerale.add(AKA.get(i).chopper.getContentPane());
jpgenerale.revalidate();
jpgenerale.repaint();
}
});
getContentPane().add(droite, c);
jpgenerale = new JPanel();
c.anchor = GridBagConstraints.CENTER;
jpgenerale.setLayout(new BoxLayout(jpgenerale,BoxLayout.LINE_AXIS));
jpgenerale.setPreferredSize(new Dimension(400, 400));
jpgenerale.add(AKA.get(0).chopper.getContentPane());
c.ipady = 40;
c.gridx = 2;
c.gridy = 1;
getContentPane().add(jpgenerale,c);
setTitle("AGPM");// le titre on va change plutard
setSize(600,600);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
middle = AKA.get(0).chopper.getContentPane();
scan(middle);
middle = AKA.get(1).chopper.getContentPane();
scan(middle);
}
private static void scan(Component pan1)
{
JPanel temp = new JPanel();
temp.setBackground(Color.WHITE);//so that the image and JPanel background are unified
temp.setPreferredSize(new Dimension(400, 400));
temp.add(pan1);
BufferedImage bi = ScreenImage.createImage(temp);
try {
ScreenImage.writeImage(bi, "image.png");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
我编辑了帖子的标题,以便更清晰,如果你有任何建议,欢迎他们。
再次感谢大家:)