gpt4 book ai didi

java - 我可以从 JPanel 创建 BufferedImage 而不在 JFrame 中渲染吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:39 24 4
gpt4 key购买 nike

是否可以从 JPanel 创建 BufferedImage 而无需先在 JFrame 中渲染它?我搜索了所有我能想到的地方,但找不到答案。谁能帮忙?

这是一些示例代码。如果我不取消注释 JFrame 代码,我的 BufferedImage 就是空白的。

    test(){
// JFrame frame = new JFrame();
JPanel panel = new JPanel();
Dimension dim = new Dimension(50,50);
panel.setMinimumSize(dim);
panel.setMaximumSize(dim);
panel.setPreferredSize(dim);
JLabel label = new JLabel("hello");
panel.add(label);
// frame.add(panel);
// frame.pack();
BufferedImage bi = getScreenShot(panel);

//...code that saves bi to a jpg
}

private BufferedImage getScreenShot(JPanel panel){
BufferedImage bi = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB);
panel.paint(bi.getGraphics());
return bi;
}

最佳答案

参见 this answerSwing: Obtain Image of JFrame以及Why does the JTable header not appear in the image?有关绘制尚未渲染的组件的提示。我希望您的问题的解决方案显示在 LabelRenderTest.java 的标签中。

JLabel textLabel = new JLabel(title);
textLabel.setSize(textLabel.getPreferredSize());

更新

Dimension dim = new Dimension(50,50);
panel.setSize(dim); // very important!
panel.setMinimumSize(dim);
panel.setMaximumSize(dim);
panel.setPreferredSize(dim);
// ...

或者这里是完整的源代码。标签的大小也需要设置。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.image.BufferedImage;

import javax.swing.*;

public class RenderTest {

RenderTest() {
JPanel panel = new JPanel();
panel.setBackground(Color.RED);
Dimension dim = new Dimension(50,50);
panel.setSize(dim);
panel.setMinimumSize(dim);
panel.setMaximumSize(dim);
panel.setPreferredSize(dim);
JLabel label = new JLabel("hello");
label.setSize(label.getPreferredSize());
panel.add(label);

BufferedImage bi = getScreenShot(panel);
JOptionPane.showMessageDialog(null, new JLabel(new ImageIcon(bi)));
}

private BufferedImage getScreenShot(JPanel panel){
BufferedImage bi = new BufferedImage(
panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB);
panel.paint(bi.getGraphics());
return bi;
}

public static void main(String[] args) {
new RenderTest();
}
}

关于java - 我可以从 JPanel 创建 BufferedImage 而不在 JFrame 中渲染吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12480181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com