`
swen00
  • 浏览: 60729 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JTable保存为图片

    博客分类:
  • java
阅读更多
历经几天研究,终于搞定,记录下
代码如下:
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,如果显示出图片,表明配置成功


分享到:
评论

相关推荐

    如何在JTable的单元格里添加图片,Button组件,Label组件等等组件

    添加组件后,在组件上添加图片 1.设置Table的Model这个需要重写AbstractTableModel类, 2.设置Table的DefaultRenderer,这个根据个人需要选择将要添加到Table的cell里的 组件(JButton,JLable...)继承相应的组件...

    JTable使用 JTable使用

    JTable使用 JTable使用JTable使用JTable使用

    JTable

    JTable的显示效果

    JTable的使用收藏

    JTable的使用收藏 1.JTable与TableModel ...3.新加列,将列设为下拉框 4.表格排序 3. JTable事件响应和项目设想 4.一个游戏:《java连连看》 1.需求分析 2.编写TableModel和界面实现 3.连连看事件监听 总结和任务

    jTree和jTable 双向联动

    实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。

    Swing之JTable详解

    Swing之JTable详解 类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.JTabel

    JTable动态刷新数据

    JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据JTable动态刷新数据

    Swing JTable 常用属性

    Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性

    swing Jtable使用checkbox

    swing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing Jtable使用checkboxswing ...

    支持ResultSet的JTable

    ResultSet直接在JTable显示

    将JTable中的数据保存到Excel中

    将JTable中的数据导出到Excel文件。

    mvc+Jquery-jTable

    mvc下使用jtable插件

    JTable多种实用示例

    Excel导入JTable JTable导出Excel JTable删除行 JTable显示实体数据 JTable的Vector添加实体,支持直接增加实体至JTable中,删除行时允许多种可能性(单选 连续多选 任意多选)。

    Java JTree+JTable应用

    java JTree+JTable使用样例,实现将JTree的节点内容显示到JTable中,eclipse导入maven项目 maven编译: mvn clean package

    Jtable导出到excel

    如果业务应用程序可以将数据导入 Microsoft Excel 和从 Microsoft Excel 中导出数据,则会为用户带来方便,使用户可以使用无处不在的该电子表格程序的强大功能。此 Java 技巧将帮助您理解系统剪贴板,并使您的 ...

    Jtable 中放入多个按钮

    JTable 在一个单元格放入多个按钮,

    Swing之JTable的详细介绍

    Swing之JTable的详细介绍,讲述jtable的操作和excle表之间的转换

    JTable自动换行

    JTable的自动换行。挺好用的。里面还可以设置字体大小。分享一下。

    JTable添加CheckBox

    一个JTable里添加CheckBox的完整例子,包括表头的JCheckBox全选联动

    jtable详解

    java swing jtable详解 world文档形式

Global site tag (gtag.js) - Google Analytics