Bro*_*oke 11 java swing bufferedimage jpanel jframe
是否可以从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;
}
Run Code Online (Sandbox Code Playgroud)
看看这个答案,以摇摆:获取JFrame的图像,以及为什么JTable的头图像中不出现?有关绘制尚未渲染的组件的提示.我希望您的问题的修复程序显示在标签中LabelRenderTest.java.
JLabel textLabel = new JLabel(title);
textLabel.setSize(textLabel.getPreferredSize());
Run Code Online (Sandbox Code Playgroud)

Dimension dim = new Dimension(50,50);
panel.setSize(dim); // very important!
panel.setMinimumSize(dim);
panel.setMaximumSize(dim);
panel.setPreferredSize(dim);
// ...
Run Code Online (Sandbox Code Playgroud)
或者这是完整的来源.还需要设置标签的大小.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8731 次 |
| 最近记录: |