Java 如何将可滚动的JPanel保存为jpeg图像(而不是快照)

Java 如何将可滚动的JPanel保存为jpeg图像(而不是快照),java,swing,awt,jpanel,Java,Swing,Awt,Jpanel,如何将JPanel存储为jpeg图像我可以搜索的解决方案会对显示进行快照,这不会捕获JPanel的所有内容,因为其中一部分是隐藏的。有没有办法用jpeg格式获得整个图像 这里提供的解决方案一点也不好用 我当前用于拍摄JPanel快照的代码 if (panelx == null) { jButton3.setText("Generate Diagram"); } else { jButton3.setText("Generate Di

如何将
JPanel
存储为jpeg图像我可以搜索的解决方案会对显示进行快照,这不会捕获
JPanel
的所有内容,因为其中一部分是隐藏的。有没有办法用jpeg格式获得整个图像

这里提供的解决方案一点也不好用

我当前用于拍摄JPanel快照的代码

if (panelx == null) {
            jButton3.setText("Generate Diagram");
        } else {
            jButton3.setText("Generate Diagram");
            jTextPane1
                    .setText(Messages.getString("statement2")); //$NON-NLS-1$
            JFrame win = (JFrame) SwingUtilities
                    .getWindowAncestor(panelx.panelx);
            Dimension size = win.getSize();
            // BufferedImage image = new BufferedImage(size.width, size.height,
            // BufferedImage.TYPE_INT_RGB);
            BufferedImage image = (BufferedImage) win.createImage(size.width,
                    size.height);
            Graphics g = image.getGraphics();
            win.paint(g);
            g.dispose();
            try {

                ImageIO.write(
                        image,
                        Messages.getString("Statement38"), new File(Messages.getString("statement5"))); //$NON-NLS-1$ //$NON-NLS-2$
            } catch (IOException e) {
                System.out.println("Image cannot be created");
            }

你没有解释为什么这个例子不起作用

你为什么用窗户而不是面板?如果您使用的是示例答案,您应该参考滚动窗格中的面板


您正在调用整个JFrame上的paint,而不仅仅是您感兴趣的面板。

来自整个JPanel的图形或仅来自可见的JViewportJScrollPane@mKorbel从整个JPanel。为了看到整个图像,我们必须滚动JPanel。我想要一个解决方案,我们可以将此图像存储为jpeg格式,无需滚动,整个输出都在那里。到目前为止,您尝试了什么?或者换句话说:展示一个能证明你的问题的SSCE。@kleopatra让我给你展示一下我正在使用的不是SSCE的方法(谷歌是你的朋友:-)