解决方案 »

  1.   

    (上文中的源代码后续的部分如下)
            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("\\&quot;", "\"")
    .replaceAll("\\&amp;", "&").replaceAll("\\&lt;", "<")
    .replaceAll("\\&gt;", ">").replaceAll("\\&nbsp;", " ");
    } 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!!
            谢谢高手!!
      

  2.   

    你这代码和JTextPane有关联吗?
      

  3.   

    首先感谢水晶之夜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~~~~~~!!!!
            万岁~~~~~!!!!!
            
      

  4.   

    方老师,李老师,huadis老师.
             学生补充一个帖子:
            上帖中的第二幅图片下方的括号中的内容,学生取消一下.
            学生换了一组图片贴到了第二帖中,由于学生粗心,导致了上帖中的第二幅图片下方的括号里的内容出现了“未取消”的bug.
            希望方老师,李老师,huadis老师,能够包涵学生的过错.
            学生率一家大中小,向方老师,李老师,huadis老师,做深深的抱拳礼!!
            
          (学生)(学生家乡未过门的女朋友)(学生未来的儿子,学生相信:不是女儿)(学生的妈妈)(学生的爸爸)
            谢谢方老师!!谢谢李老师!!谢谢huadis老师!!