求点拨一个Swing的开发技术细节. swing图片处理SwingJTextPaneSwing精工 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (上文中的源代码后续的部分如下) ps.add(new MyAbstractClipboardProccess() { /** * */ private static final long serialVersionUID = 1L; public boolean isSupport(Object content) { return content.toString().trim().startsWith("<html") || content.toString().trim().startsWith("<HTML"); } public MyImgTextContent getContent(Object content) { content = content.toString().trim().replaceAll("(\r|\n)+", "") .replaceAll("<!--(.)*?-->", "").replaceAll("<!(.)*?>", "").replaceAll("<style>.*?</style>", "") .replaceAll("<STYLE>.*?</STYLE>", "").replaceAll( "</p>", "\n").replaceAll("</P>", "\n") .replaceAll("<br>", "\n").replaceAll("<br/>", "\n") .replaceAll("<IMG", "<img").replaceAll( "<(?!img).*?(/)?>", "") .replaceAll("</.+?>", ""); MyImgTextContent mtc = new MyImgTextContent(); for (String str : content.toString().split("<")) { if (str.startsWith("img")) { mtc.put("img", saveImgToMyTemp(str.split("file:///")[1] .split("\"")[0])); if (!str.endsWith(">")) { mtc.put("text", escapeHtml(str.split(">")[str .split(">").length - 1])); } } else { if (!"".equals(str)) { mtc.put("text", escapeHtml(str.split("file:///")[0] .split("\"")[0])); } } } return mtc; } });// 默认剪切板处理类, 支持解析word&qq ps.add(new MyAbstractClipboardProccess() { /** * */ private static final long serialVersionUID = 1L; public boolean isSupport(Object content) { return content instanceof java.awt.image.BufferedImage; } public MyImgTextContent getContent(Object content) { MyImgTextContent mtc = new MyImgTextContent(); mtc.put("img", saveImgToMyTemp((BufferedImage) content)); return mtc; } });// 剪切板图片处理类, 支持解析word&qq截图 ps.add(new MyAbstractClipboardProccess() { /** * */ private static final long serialVersionUID = 1L; public boolean isSupport(Object content) { return content instanceof java.lang.String; } public MyImgTextContent getContent(Object content) { MyImgTextContent mtc = new MyImgTextContent(); mtc.put("text", content.toString()); return mtc; } });// 剪切板文字处理类, 支持解析word&qq // 使用ps.add();相应的实现类扩展其他软件的支持 } /** * 封装剪切板图文混排内容 * * @author NeverChange * */ public static class MyImgTextContent implements Iterable<String>, Serializable { /** * */ private static final long serialVersionUID = 1L; private String MyObjNum = ""; private String MyObjRole = ""; /** * */ public MyImgTextContent() { // TODO Auto-generated constructor stub } public String getMyObjNum() { return MyObjNum; } public void setMyObjNum(String myObjNum) { MyObjNum = myObjNum; } public String getMyObjRole() { return MyObjRole; } public void setMyObjRole(String myobjRole) { MyObjRole = myobjRole; } List<String> content = new ArrayList<String>(); public void put(String type, String content) { this.content.add(type + "-" + content); } public int hashCode() { return content.hashCode(); } public boolean equals(Object obj) { return content.equals(obj); } public String toString() { StringBuffer str = new StringBuffer(); int ct = 0; for (String c : content) { str.append("\n" + (ct++) + " : " + c); } return str.toString(); } public Iterator<String> iterator() { return content.iterator(); } } public static abstract class MyAbstractClipboardProccess implements Serializable { /** * */ private static final long serialVersionUID = 1L; public abstract boolean isSupport(Object content); public abstract MyImgTextContent getContent(Object content); public static void fileCopy(File source, File target) { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(source); fos = new FileOutputStream(target); int ct = 0; byte[] bs = new byte[1024 * 8]; while (-1 != (ct = fis.read(bs))) { fos.write(bs, 0, ct); } fis.close(); } catch (Exception e) { if (null != fis) { try { fis.close(); } catch (IOException e1) { e1.printStackTrace(); } } e.printStackTrace(); } } public String escapeHtml(String html) { return null == html ? null : html.replaceAll("\\"", "\"") .replaceAll("\\&", "&").replaceAll("\\<", "<") .replaceAll("\\>", ">").replaceAll("\\ ", " "); } public String saveImgToMyTemp(String path) { try { File source = new File(path); if (source.exists() && source.isFile()) { File target = new File(TEMP_PATH + "\\" + UUID.randomUUID().toString() + "." + path.split("\\.")[path.split("\\.").length - 1]); target.createNewFile(); this.fileCopy(source, target); return target.getPath(); } } catch (IOException e) { e.printStackTrace(); } return null; } public String saveImgToMyTemp(BufferedImage img) { try { File target = new File(TEMP_PATH + "\\" + UUID.randomUUID().toString() + ".jpg"); target.createNewFile(); FileOutputStream fos = new FileOutputStream(target); ImageIO.write(img, "jpg", fos); fos.flush(); fos.close(); return target.getPath(); } catch (Exception e) { e.printStackTrace(); } return null; } } public static MyImgTextContent getMyImgTextContentFromClipboard() { Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable cc = sysc.getContents(null); for (DataFlavor df : sysc.getAvailableDataFlavors()) { try { for (MyAbstractClipboardProccess mcpi : ps) { if (mcpi.isSupport(cc.getTransferData(df))) { return mcpi.getContent(cc.getTransferData(df)); } } } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } return null; } public static void main(String[] args) { MyImgTextContent mtc = getMyImgTextContentFromClipboard(); System.out.println(mtc); }} 希望能够得到CSDN中的高手的点拨!! 谢谢CSDN!! 谢谢高手!! 你这代码和JTextPane有关联吗? 首先感谢水晶之夜2013老师的指导!!学生今后将在这个字段上,注意学生的提问方式的“用户UI”. 感谢方老师的到场!! 也感谢liboshi老师与huadis老师的到场!! 方老师,liboshi老师,huadis老师,学生刚才看到了一篇很启发学生的名博,是风柏杨老师写的: http://blog.csdn.net/one_and_only4711/article/details/6594770 学生受益匪浅!! 方老师,liboshi老师,huadis老师,学生现在留下的问题是: 下面如果是学生的当前IM的聊天窗口: 方老师,您可以看到: 上面的聊天窗口,是“图片比较大的”. 方老师,liboshi老师,huadis老师,学生如果把这个窗口拖拽成下面的大小: (方老师,由于上面的图片经过了微软的操作系统的处理,变大了....学生就是把QQ的聊天窗口最大化与“最小化”两个状态进行比较) 方老师,按照上面的步骤,您应该能够看到: 腾讯的产品,他是具有“让留言板的图片随着窗口的大小的改变而变化的功能”的. 现在学生的这个作品出现的问题是: 如果学生进行学生的ChatUI窗口的最大化,并且取了一副“整个桌面的大小的图片”的话. 进行如上图片二中的“ChatUI最小化”的操作后,学生将在学生的IM的ChatUI中,只能够看到图片中的“第一幅图片中的最右侧"革命二字"”这么大范围,也就是学生的留言板大小的范围的图片内容. 就是上文学生工程里的留言板的大小如果发生改变后,学生的留言板中的图片,不能够跟着进行缩放。 影响到用户浏览图片时的学生这个作品的用户体验. 方老师,liboshi老师,huadis老师,学生希望能够得到三位老师的指导: 学生的这个作品中的“JTextPane”的用户贴图,在留言板中,学生应该怎么弄,能够让用户的贴图,在学生上面的“图文混排组件”的代码结构下,实现出:“用户贴图与窗口大小的变化相对应地进行自我调整”,的开发需求的实现. 希望得到方老师,liboshi老师,huadis老师的指导!! 也期望得到路过的CSDN中的诸位高手的相助!! 万能的CSDN~~~~~~!!!! 万岁~~~~~!!!!! 方老师,李老师,huadis老师. 学生补充一个帖子: 上帖中的第二幅图片下方的括号中的内容,学生取消一下. 学生换了一组图片贴到了第二帖中,由于学生粗心,导致了上帖中的第二幅图片下方的括号里的内容出现了“未取消”的bug. 希望方老师,李老师,huadis老师,能够包涵学生的过错. 学生率一家大中小,向方老师,李老师,huadis老师,做深深的抱拳礼!! (学生)(学生家乡未过门的女朋友)(学生未来的儿子,学生相信:不是女儿)(学生的妈妈)(学生的爸爸) 谢谢方老师!!谢谢李老师!!谢谢huadis老师!! JCheckBox添加ItemListener后无法选中 中文乱码问题 用poi读取EXCEL问题 询问调查:大家都用什么IDE开发JAVA? 了解sip的朋友来帮助一下!UP有分! 实在没办法了,java 程序在sparc+solaris 下打印缺页,在windows上完全OK 大家帮帮忙啊!java我没有实际经验,这两道面试题该选什么? swt使用中的线程问题! 如何获得html文件中 每一段的文本内容 寻找书籍:数据结构与算法分析(java版) 纯新手,问大神怎么练习java 请教一个Swing的技术细节.
ps.add(new MyAbstractClipboardProccess() { /**
*
*/
private static final long serialVersionUID = 1L; public boolean isSupport(Object content) {
return content.toString().trim().startsWith("<html")
|| content.toString().trim().startsWith("<HTML");
} public MyImgTextContent getContent(Object content) {
content = content.toString().trim().replaceAll("(\r|\n)+", "")
.replaceAll("<!--(.)*?-->", "").replaceAll("<!(.)*?>",
"").replaceAll("<style>.*?</style>", "")
.replaceAll("<STYLE>.*?</STYLE>", "").replaceAll(
"</p>", "\n").replaceAll("</P>", "\n")
.replaceAll("<br>", "\n").replaceAll("<br/>", "\n")
.replaceAll("<IMG", "<img").replaceAll(
"<(?!img).*?(/)?>", "")
.replaceAll("</.+?>", ""); MyImgTextContent mtc = new MyImgTextContent();
for (String str : content.toString().split("<")) {
if (str.startsWith("img")) {
mtc.put("img", saveImgToMyTemp(str.split("file:///")[1]
.split("\"")[0]));
if (!str.endsWith(">")) {
mtc.put("text", escapeHtml(str.split(">")[str
.split(">").length - 1]));
}
} else {
if (!"".equals(str)) {
mtc.put("text", escapeHtml(str.split("file:///")[0]
.split("\"")[0]));
}
}
} return mtc;
} });// 默认剪切板处理类, 支持解析word&qq
ps.add(new MyAbstractClipboardProccess() { /**
*
*/
private static final long serialVersionUID = 1L; public boolean isSupport(Object content) {
return content instanceof java.awt.image.BufferedImage;
} public MyImgTextContent getContent(Object content) {
MyImgTextContent mtc = new MyImgTextContent();
mtc.put("img", saveImgToMyTemp((BufferedImage) content));
return mtc;
} });// 剪切板图片处理类, 支持解析word&qq截图
ps.add(new MyAbstractClipboardProccess() { /**
*
*/
private static final long serialVersionUID = 1L; public boolean isSupport(Object content) {
return content instanceof java.lang.String;
} public MyImgTextContent getContent(Object content) {
MyImgTextContent mtc = new MyImgTextContent();
mtc.put("text", content.toString());
return mtc;
} });// 剪切板文字处理类, 支持解析word&qq
// 使用ps.add();相应的实现类扩展其他软件的支持
} /**
* 封装剪切板图文混排内容
*
* @author NeverChange
*
*/
public static class MyImgTextContent implements Iterable<String>,
Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private String MyObjNum = "";
private String MyObjRole = ""; /**
*
*/
public MyImgTextContent() {
// TODO Auto-generated constructor stub
} public String getMyObjNum() {
return MyObjNum;
} public void setMyObjNum(String myObjNum) {
MyObjNum = myObjNum;
} public String getMyObjRole() {
return MyObjRole;
}
public void setMyObjRole(String myobjRole) {
MyObjRole = myobjRole;
}
List<String> content = new ArrayList<String>(); public void put(String type, String content) {
this.content.add(type + "-" + content);
} public int hashCode() {
return content.hashCode();
} public boolean equals(Object obj) {
return content.equals(obj);
} public String toString() {
StringBuffer str = new StringBuffer();
int ct = 0;
for (String c : content) {
str.append("\n" + (ct++) + " : " + c);
} return str.toString();
} public Iterator<String> iterator() {
return content.iterator();
} } public static abstract class MyAbstractClipboardProccess implements
Serializable {
/**
*
*/
private static final long serialVersionUID = 1L; public abstract boolean isSupport(Object content);
public abstract MyImgTextContent getContent(Object content); public static void fileCopy(File source, File target) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(source);
fos = new FileOutputStream(target); int ct = 0;
byte[] bs = new byte[1024 * 8];
while (-1 != (ct = fis.read(bs))) {
fos.write(bs, 0, ct);
}
fis.close();
} catch (Exception e) {
if (null != fis) {
try {
fis.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
} public String escapeHtml(String html) {
return null == html ? null : html.replaceAll("\\"", "\"")
.replaceAll("\\&", "&").replaceAll("\\<", "<")
.replaceAll("\\>", ">").replaceAll("\\ ", " ");
} public String saveImgToMyTemp(String path) {
try {
File source = new File(path);
if (source.exists() && source.isFile()) {
File target = new File(TEMP_PATH + "\\"
+ UUID.randomUUID().toString() + "."
+ path.split("\\.")[path.split("\\.").length - 1]);
target.createNewFile();
this.fileCopy(source, target);
return target.getPath();
}
} catch (IOException e) {
e.printStackTrace();
} return null;
} public String saveImgToMyTemp(BufferedImage img) {
try {
File target = new File(TEMP_PATH + "\\"
+ UUID.randomUUID().toString() + ".jpg");
target.createNewFile();
FileOutputStream fos = new FileOutputStream(target);
ImageIO.write(img, "jpg", fos);
fos.flush();
fos.close();
return target.getPath();
} catch (Exception e) {
e.printStackTrace();
} return null;
} } public static MyImgTextContent getMyImgTextContentFromClipboard() {
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable cc = sysc.getContents(null); for (DataFlavor df : sysc.getAvailableDataFlavors()) {
try {
for (MyAbstractClipboardProccess mcpi : ps) {
if (mcpi.isSupport(cc.getTransferData(df))) {
return mcpi.getContent(cc.getTransferData(df));
}
}
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
} return null;
} public static void main(String[] args) {
MyImgTextContent mtc = getMyImgTextContentFromClipboard();
System.out.println(mtc);
}}
希望能够得到CSDN中的高手的点拨!!
谢谢CSDN!!
谢谢高手!!
学生今后将在这个字段上,注意学生的提问方式的“用户UI”.
感谢方老师的到场!!
也感谢liboshi老师与huadis老师的到场!!
方老师,liboshi老师,huadis老师,学生刚才看到了一篇很启发学生的名博,是风柏杨老师写的:
http://blog.csdn.net/one_and_only4711/article/details/6594770
学生受益匪浅!!
方老师,liboshi老师,huadis老师,学生现在留下的问题是:
下面如果是学生的当前IM的聊天窗口:
方老师,您可以看到:
上面的聊天窗口,是“图片比较大的”.
方老师,liboshi老师,huadis老师,学生如果把这个窗口拖拽成下面的大小:
(方老师,由于上面的图片经过了微软的操作系统的处理,变大了....学生就是把QQ的聊天窗口最大化与“最小化”两个状态进行比较)
方老师,按照上面的步骤,您应该能够看到:
腾讯的产品,他是具有“让留言板的图片随着窗口的大小的改变而变化的功能”的.
现在学生的这个作品出现的问题是:
如果学生进行学生的ChatUI窗口的最大化,并且取了一副“整个桌面的大小的图片”的话.
进行如上图片二中的“ChatUI最小化”的操作后,学生将在学生的IM的ChatUI中,只能够看到图片中的“第一幅图片中的最右侧"革命二字"”这么大范围,也就是学生的留言板大小的范围的图片内容.
就是上文学生工程里的留言板的大小如果发生改变后,学生的留言板中的图片,不能够跟着进行缩放。
影响到用户浏览图片时的学生这个作品的用户体验.
方老师,liboshi老师,huadis老师,学生希望能够得到三位老师的指导:
学生的这个作品中的“JTextPane”的用户贴图,在留言板中,学生应该怎么弄,能够让用户的贴图,在学生上面的“图文混排组件”的代码结构下,实现出:“用户贴图与窗口大小的变化相对应地进行自我调整”,的开发需求的实现.
希望得到方老师,liboshi老师,huadis老师的指导!!
也期望得到路过的CSDN中的诸位高手的相助!!
万能的CSDN~~~~~~!!!!
万岁~~~~~!!!!!
学生补充一个帖子:
上帖中的第二幅图片下方的括号中的内容,学生取消一下.
学生换了一组图片贴到了第二帖中,由于学生粗心,导致了上帖中的第二幅图片下方的括号里的内容出现了“未取消”的bug.
希望方老师,李老师,huadis老师,能够包涵学生的过错.
学生率一家大中小,向方老师,李老师,huadis老师,做深深的抱拳礼!!
(学生)(学生家乡未过门的女朋友)(学生未来的儿子,学生相信:不是女儿)(学生的妈妈)(学生的爸爸)
谢谢方老师!!谢谢李老师!!谢谢huadis老师!!