`
swen00
  • 浏览: 62510 次
  • 性别: 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,如果显示出图片,表明配置成功


分享到:
评论

相关推荐

    GRID中显示通用字段图片示例

    将BMP图片存储在通用字段中,意味着我们可以利用数据库的存储能力来保存和管理图像数据,而不是依赖外部文件系统。 要实现“在GRID中显示通用字段图片”,我们需要以下几个关键步骤: 1. **数据存储**:首先,需要...

    基于Java swing的风景日历课程设计

    此外,项目中可能还涉及了文件I/O操作,因为要读取和保存用户的图片选择。这可能用到java.io和java.nio包下的类,如FileInputStream、FileOutputStream或者Files类,用于读写文件。同时,考虑到图片的处理,可能会...

    java Swing电子相册管理系统 面向对象思想

    在电子相册系统中,可能使用JList或JTable来展示图片列表,JScrollPane用于在需要时滚动内容,JButton则用于触发各种操作,如打开、保存、删除图片等。 3. **事件处理**:Swing使用监听器模型处理用户交互。例如,...

    java swing写的资源管理器

    这需要读取文件内容,将图片数据转换为Icon对象,然后在适当的位置设置到界面中。如果涉及到大量的图片加载,还需要考虑性能优化,比如使用缓存策略,避免频繁的IO操作。 在实际编程中,开发者还需要考虑其他功能,...

    聊天界面搭建,原生JAVA开发(图片,文字,定位)

    在Java中,我们可以使用JTextPane或JTextArea来创建文本输入框,JButton创建发送按钮,JList或JTable展示消息历史,JLabel或JScrollPane用于显示图片,而JMapViewer或Google Maps API则可实现地图功能。 2. **事件...

    java 电子相册

    在实现过程中,Java电子相册可能还采用了文件I/O操作来读取和保存图片,例如使用FileInputStream和FileOutputStream。为了提高性能,可能还使用了缓存机制来存储已加载的图片,避免频繁的磁盘访问。 此外,考虑到...

    Java 选修课程系统源代码,Eclipse+Mysql开发

    Java 选修课程管理系统,广东石油... 6、新增“日志管理”模块中添加 “保存日志”功能  8、开启及JTable表格自动排序功能  9、数据库升级为MySql  10、去掉绝大部分无关要痛的图片  11、加入初始化数据库功能

    java中 Swing与IO的综合应用

    例如,我们可以使用FileInputStream和FileOutputStream读写文件,BufferedReader和BufferedWriter提高读写效率,ObjectInputStream和ObjectOutputStream实现对象的序列化和反序列化,以便保存和恢复用户数据。...

    java项目之学生信息管理系统源码(swing).zip

    同时,项目中可能还包括图片资源,如“未命名_meitu_2.jpg”等,这些图片可能是系统界面的截图,帮助用户理解系统的实际运行效果。 6. **多媒体支持**:“java swing实现的学生信息管理系统.avi”可能是一个演示...

    JtreeTable和截图软件snagit

    - **JTreeTable**: 结合了JTree和JTable的功能,使每个树节点可以扩展为包含多列的表格。 2. **使用场景** - 文件管理器:显示文件和目录的层次结构,每个目录可展开显示其包含的文件。 - 软件工程:表示类继承...

    Java课程设计汇本指导书.doc

    - 使用ImageIO类保存截取的图片到本地。 3. **扫雷游戏实现**: - 目标:开发一款与Windows扫雷游戏相似的程序,包含初级、中级和高级游戏模式。 - 技术实现: - 自定义JButton类,创建专属的按钮类。 - 应用...

    Java+Swing实现电子相册管理系统

    可能还使用了ImageIO类来处理图像,支持多种图片格式的读取和保存。 为了提高用户体验,系统可能实现了照片的缩略图功能,这通常涉及到图像处理,如使用Java的BufferedImage类裁剪和缩放图像。同时,为了保证程序的...

    基于JAVA数据可视化设计与实现.zip

    6. **导出与保存**: 可视化结果可以保存为图片或PDF,以便在其他地方使用。JavaFX和JFreeChart等库提供了导出功能。 通过学习和实践这些技术,开发者可以创建出功能强大、视觉效果出色的Java数据可视化应用。结合...

    AirlineListFetcher:该应用程序旨在与齐射框架一起使用,以下载带有图像的航空公司列表并进行显示。 它还允许将每个项目保存在列表中并将其标记为收藏和排序

    它能够从网络上下载航空公司的信息,包括但不限于公司名称、标识、简介等,同时还会下载与航空公司相关的图片,如logo等,这样可以为用户提供更加生动和直观的浏览体验。这种功能通常涉及到网络编程,可能使用了HTTP...

    软件1906-解梦华-XJ20192501347-实验41

    - 用户完成设置后,可通过"OK"、"Cancel"或"Apply"按钮保存或取消修改。"Apply"按钮会弹出一个显示用户设置的提示框。 2. **概要设计**: - 使用NetBeans工具构建主界面,集成jSpinner、jLabel、jButton、jTable...

    简单学生学籍管理系统

    在描述中提到了“图片的插入”,这可能涉及到Java的IO流和图像处理库,例如使用`javax.imageio.ImageIO`来读取和显示图片。这通常用于制作系统图标或者在界面上展示学生的个人照片。 “鼠标的更改”可能指的是鼠标...

    java swing 订餐管理系统 (完整版)

    当用户确认订单后,系统将这些信息保存为待处理订单。 购物车功能通常包括计算总价和提交订单的选项。在提交订单时,系统会进行必要的校验,如检查库存、验证支付信息等,然后将订单信息保存到数据库中。 至于...

    java课程设计--电话簿升级

    - **持久化存储**:为了保存和加载联系人信息,需要实现文件读写操作。可以使用File类进行文件创建、读取和写入,或者使用序列化技术将对象直接存入和从磁盘中恢复。 - **数据格式**:数据可能以XML、JSON或自定义...

    java编写的学生成绩管理系统GUI界面.zip

    例如,当用户点击“保存”按钮时,系统会将GUI界面中的数据转化为SQL语句,如INSERT INTO或UPDATE语句,然后通过JDBC发送到数据库。 自动检测重复学号通常涉及到数据校验和比较。开发者可能在添加新记录前查询...

    Swing开发数码照片管理程序

    4. **图片处理**:可能使用了Java的`javax.imageio`包来加载、显示和保存图像。此外,还可能使用了第三方库,如ImageIO或Apache Commons Imaging,来进行更复杂的图片操作,如缩放、裁剪等。 5. **数据库集成**:...

Global site tag (gtag.js) - Google Analytics