java – 无头画
发布时间:2020-12-15 04:11:04 所属栏目:Java 来源:网络整理
导读:我想在无头模式下将JPanel绘制成Buffered Image(屏幕上根本没有GUI). final JPanel panel = createPanel();panel.setSize(panel.getPreferredSize());panel.validate();// JFrame frame = new JFrame();// frame.getContentPane().add(panel);// frame.pack(
我想在无头模式下将JPanel绘制成Buffered
Image(屏幕上根本没有GUI).
final JPanel panel = createPanel(); panel.setSize(panel.getPreferredSize()); panel.validate(); // JFrame frame = new JFrame(); // frame.getContentPane().add(panel); // frame.pack(); // frame.setVisible(true); final BufferedImage image = new BufferedImage( panel.getBounds().width,panel.getBounds().height,BufferedImage.TYPE_INT_ARGB ); final Graphics2D gc = image.createGraphics(); gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); gc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON); try { panel.paint(gc); ...save the image somewhere... } finally { gc.dispose(); } 但是我总是得到空图像,直到我将面板放入一个重量级的组件并在屏幕上显示(参见注释代码).我不想显示它,这个应用程序在服务器上运行. 这是SSCCE: public class Example { private static JPanel createPanel() { final JPanel panel = new JPanel(new GridBagLayout()); final JLabel label = new JLabel("Yeah,it's working!",SwingConstants.CENTER); label.setFont(new Font("Arial",Font.PLAIN,12)); final GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 1; constraints.weightx = 1; panel.add(label,constraints); return panel; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { final JPanel panel = createPanel(); panel.setSize(panel.getPreferredSize()); panel.validate(); // JFrame frame = new JFrame(); // frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE); // frame.getContentPane().add(panel); // frame.pack(); // frame.setVisible(true); final BufferedImage image = new BufferedImage( panel.getBounds().width,BufferedImage.TYPE_INT_ARGB ); final Graphics2D gc = image.createGraphics(); gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); gc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON); try { panel.paint(gc); ImageIO.write(image,"png",new File("image.png")); } catch (IOException e) { e.printStackTrace(); } finally { gc.dispose(); } } }); } } 解决方法
组件的大小为零,直到组件已实现,因此绘制方法不起作用.
查看Screen Image.它将通过在面板上调用doLayout()来确保所有组件都具有有效大小,从而为您解决此问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |