浏览 5118 次
锁定老帖子 主题:JTable保存为图片
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-14
最后修改:2009-06-18
代码如下: import java.awt.*; import java.awt.image.BufferedImage; import java.io.OutputStream; import javax.imageio.ImageIO; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.*; import javax.swing.table.TableColumn; import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableCellRenderer; public class ImageGenerator extends HttpServlet { /** */ /** * */ private static final long serialVersionUID = -3938318741402322164L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { try { response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); //GraphicsEnvironment ge = // GraphicsEnvironment.getLocalGraphicsEnvironment(); //System.out.println("ge.isHeadless() = " + ge.isHeadless()); //if (!ge.isHeadless()) { // System.setProperty("java.awt.headless", "true"); //} String columnNames[] = {"编号", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}; String[][] rowData = {{"04001", "01", "02", "", "", "", "", "", "", "", "", ""} , {"04001", "01", "02", "", "", "", "", "", "", "", "", ""} , {"04002", "", "", "03", "", "", "06", "", "08", "", "", ""} , {"04003", "", "02", "", "04", "05", "", "", "", "", "", ""} , {"04004", "", "", "", "", "", "", "07", "", "09", "10", ""} , {"04005", "", "", "", "", "", "", "", "", "", "", ""} , {"04006", "", "", "", "", "", "06", "", "08", "", "", ""} , {"04007", "", "", "", "04", "", "", "07", "", "", "", ""} , {"04008", "", "", "", "", "05", "", "", "", "09", "", "11"} , {"04009", "01", "", "03", "", "05", "", "", "", "", "", ""} }; DefaultTableModel model = new DefaultTableModel(rowData, columnNames) { public boolean isCellEditable(int row, int column) { return false; } }; DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value != null && value.toString().trim().length() != 0 && column != 0) { setBackground(Color.red); } else { setBackground(Color.white); } return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }; //Jtable大小 int table_width = 300; int table_hight = 180; //图片生成后再压缩后大小 int image_width = 180; int image_hight = 180; JTable table = new JTable(model); table.setPreferredSize(new Dimension(table_width, table_hight)); //设置列表现器------------------------// for (int i = 0; i < columnNames.length; i++) { table.getColumn(columnNames[i]).setCellRenderer(tcr); } int width = 40; table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); TableColumn firsetColumn = table.getColumnModel().getColumn(0); firsetColumn.setPreferredWidth(width); firsetColumn.setMinWidth(width); firsetColumn.setMinWidth(width); JFrame f = new JFrame(); JScrollPane scrollPane = new JScrollPane(table); scrollPane.setAutoscrolls(false); f.getContentPane().add(scrollPane); f.setSize(table_width, table_hight); f.pack(); //f.setVisible(true); BufferedImage image = createImage(table); if (f != null) { f.dispose(); } //对图片进行压缩处理,输出到指定目录 JTableImageCreator.reduceImg(image , "d:/test.png" , image_width, image_hight); OutputStream os = response.getOutputStream(); ImageIO.write(image, "PNG", os); os.flush(); os.close(); } catch (Exception ex) { ex.printStackTrace(); } } public static BufferedImage createImage(JTable table) { //get the table header component JTableHeader tableHeaderComp = table.getTableHeader(); int totalWidth = table.getPreferredSize().width; int totalHeight = table.getPreferredSize().height; BufferedImage tableImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2D = (Graphics2D) tableImage.createGraphics(); g2D.setColor(Color.WHITE); g2D.fillRect(0, 0, totalWidth, totalHeight); g2D.translate(0, 0); tableHeaderComp.paint(g2D); g2D.translate(0, tableHeaderComp.getPreferredSize().height); table.paint(g2D); g2D.dispose(); //return the table image return tableImage; } //压缩图片 public static void reduceImg(BufferedImage bufferedImage, String imgdist, int widthdist, int heightdist) { try { BufferedImage tag = new BufferedImage(widthdist, heightdist, BufferedImage.TYPE_INT_RGB); /* * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 * 优先级比速度高 生成的图片质量比较好 但速度慢 */ tag.getGraphics().drawImage( bufferedImage.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(tag, "png", new File(imgdist)); } catch (IOException e) { logger.error("reduceImg error :" + e.toString()); } } } 该段代码是运行在tomcat调试所用,所以需要配置下web.xml 加入 <servlet> <servlet-name>imageGenerator</servlet-name> <servlet-class>com.topman.molowap.data.trendimage.ImageGenerator</servlet-class> </servlet> <servlet-mapping> <servlet-name>imageGenerator</servlet-name> <url-pattern>/image.jsp</url-pattern> </servlet-mapping> 在linux环境下需要配置x windons 启动命令:startx & 然后执行命令: 1) export DISPLAY=:0.0 2) xhost + 为linux环境下配置郁闷了好几天,-Djava.awt.headless=true这个参数就不能加在java启动项里,原理没有去深究了,日后再补 配置是否成功访问: http://ip:port/image.jsp,如果显示出图片,表明配置成功 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |