历经几天研究,终于搞定,记录下
代码如下:
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,如果显示出图片,表明配置成功
分享到:
相关推荐
将BMP图片存储在通用字段中,意味着我们可以利用数据库的存储能力来保存和管理图像数据,而不是依赖外部文件系统。 要实现“在GRID中显示通用字段图片”,我们需要以下几个关键步骤: 1. **数据存储**:首先,需要...
此外,项目中可能还涉及了文件I/O操作,因为要读取和保存用户的图片选择。这可能用到java.io和java.nio包下的类,如FileInputStream、FileOutputStream或者Files类,用于读写文件。同时,考虑到图片的处理,可能会...
在电子相册系统中,可能使用JList或JTable来展示图片列表,JScrollPane用于在需要时滚动内容,JButton则用于触发各种操作,如打开、保存、删除图片等。 3. **事件处理**:Swing使用监听器模型处理用户交互。例如,...
这需要读取文件内容,将图片数据转换为Icon对象,然后在适当的位置设置到界面中。如果涉及到大量的图片加载,还需要考虑性能优化,比如使用缓存策略,避免频繁的IO操作。 在实际编程中,开发者还需要考虑其他功能,...
在Java中,我们可以使用JTextPane或JTextArea来创建文本输入框,JButton创建发送按钮,JList或JTable展示消息历史,JLabel或JScrollPane用于显示图片,而JMapViewer或Google Maps API则可实现地图功能。 2. **事件...
在实现过程中,Java电子相册可能还采用了文件I/O操作来读取和保存图片,例如使用FileInputStream和FileOutputStream。为了提高性能,可能还使用了缓存机制来存储已加载的图片,避免频繁的磁盘访问。 此外,考虑到...
Java 选修课程管理系统,广东石油... 6、新增“日志管理”模块中添加 “保存日志”功能 8、开启及JTable表格自动排序功能 9、数据库升级为MySql 10、去掉绝大部分无关要痛的图片 11、加入初始化数据库功能
例如,我们可以使用FileInputStream和FileOutputStream读写文件,BufferedReader和BufferedWriter提高读写效率,ObjectInputStream和ObjectOutputStream实现对象的序列化和反序列化,以便保存和恢复用户数据。...
同时,项目中可能还包括图片资源,如“未命名_meitu_2.jpg”等,这些图片可能是系统界面的截图,帮助用户理解系统的实际运行效果。 6. **多媒体支持**:“java swing实现的学生信息管理系统.avi”可能是一个演示...
- **JTreeTable**: 结合了JTree和JTable的功能,使每个树节点可以扩展为包含多列的表格。 2. **使用场景** - 文件管理器:显示文件和目录的层次结构,每个目录可展开显示其包含的文件。 - 软件工程:表示类继承...
- 使用ImageIO类保存截取的图片到本地。 3. **扫雷游戏实现**: - 目标:开发一款与Windows扫雷游戏相似的程序,包含初级、中级和高级游戏模式。 - 技术实现: - 自定义JButton类,创建专属的按钮类。 - 应用...
可能还使用了ImageIO类来处理图像,支持多种图片格式的读取和保存。 为了提高用户体验,系统可能实现了照片的缩略图功能,这通常涉及到图像处理,如使用Java的BufferedImage类裁剪和缩放图像。同时,为了保证程序的...
6. **导出与保存**: 可视化结果可以保存为图片或PDF,以便在其他地方使用。JavaFX和JFreeChart等库提供了导出功能。 通过学习和实践这些技术,开发者可以创建出功能强大、视觉效果出色的Java数据可视化应用。结合...
它能够从网络上下载航空公司的信息,包括但不限于公司名称、标识、简介等,同时还会下载与航空公司相关的图片,如logo等,这样可以为用户提供更加生动和直观的浏览体验。这种功能通常涉及到网络编程,可能使用了HTTP...
- 用户完成设置后,可通过"OK"、"Cancel"或"Apply"按钮保存或取消修改。"Apply"按钮会弹出一个显示用户设置的提示框。 2. **概要设计**: - 使用NetBeans工具构建主界面,集成jSpinner、jLabel、jButton、jTable...
在描述中提到了“图片的插入”,这可能涉及到Java的IO流和图像处理库,例如使用`javax.imageio.ImageIO`来读取和显示图片。这通常用于制作系统图标或者在界面上展示学生的个人照片。 “鼠标的更改”可能指的是鼠标...
当用户确认订单后,系统将这些信息保存为待处理订单。 购物车功能通常包括计算总价和提交订单的选项。在提交订单时,系统会进行必要的校验,如检查库存、验证支付信息等,然后将订单信息保存到数据库中。 至于...
- **持久化存储**:为了保存和加载联系人信息,需要实现文件读写操作。可以使用File类进行文件创建、读取和写入,或者使用序列化技术将对象直接存入和从磁盘中恢复。 - **数据格式**:数据可能以XML、JSON或自定义...
例如,当用户点击“保存”按钮时,系统会将GUI界面中的数据转化为SQL语句,如INSERT INTO或UPDATE语句,然后通过JDBC发送到数据库。 自动检测重复学号通常涉及到数据校验和比较。开发者可能在添加新记录前查询...
4. **图片处理**:可能使用了Java的`javax.imageio`包来加载、显示和保存图像。此外,还可能使用了第三方库,如ImageIO或Apache Commons Imaging,来进行更复杂的图片操作,如缩放、裁剪等。 5. **数据库集成**:...