请问如何在一个JTextPane组件中使用paste方法把剪贴板上的图片粘贴上去呢?而不用insertIcon()方法插入一个图片。
我希望能在一个JTextPane组件中粘贴图片或者公式。

解决方案 »

  1.   

    JTextPane的StyledDocument好象不支持从剪贴板上来的图片或样式,再查查看
      

  2.   

    import java.awt.BorderLayout;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.io.IOException;import javax.swing.*;public class ImagePasteTest
    {
    public static void main(String[] args)
    {
    JTextPane tp = new JTextPane() {
    public void paste()
    {
    if (isEditable() && isEnabled()) {
    Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable contents = cb.getContents(null);
    if (contents != null && contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {
    super.paste();
    }
    else if (contents != null && contents.isDataFlavorSupported(DataFlavor.imageFlavor)) {
    try {
    Image img = (Image) contents.getTransferData(DataFlavor.imageFlavor);
    Icon icon = new ImageIcon(img);
    insertIcon(icon);
    } catch (UnsupportedFlavorException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
    };
    JFrame f = new JFrame("Ctrl+V to paste (String or Image)");
    f.getContentPane().add(new JScrollPane(tp), BorderLayout.CENTER);
    f.setSize(500, 500);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  3.   

    用了一种迂回的方式,实现了需要的功能。
    主要就是用剪贴板上的图象生成一个icon实例,然后用insertIcon方法。
      

  4.   

    To: gtlang78()
    牛,再收一个。
      

  5.   

    To: gtlang78()
    一会儿功夫看你两个程序了,很熟啊。