我正在做一个类似qq的IM程序,对java的剪贴板的功能已经有了一定的了解,已经会读写string,image和file,但都是单独类型的读写,要是把这三种东西同时在剪贴板中读写就没法子了,网上搜索了半天了,一点成果也没有。 
想请教大家如何读写剪贴板中的图文混合时的内容。 
分就给一个人吧,只要能给我个小例子我试好了就结贴,谢谢。 
qq:247705592

解决方案 »

  1.   

    实现一个类包装你的图像和文字 
    实现你自己的Transferable类 
    在Transferable类的getTransferData(DataFlavor)里返回你的类 --------------------------------------------------------import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 
    import javax.swing.event.*; 
    import java.awt.dnd.*; 
    import java.awt.datatransfer.*; 
    import java.io.*; 
    class ClipboardTest2  

    JFrame mainFrame; 
    JPanel mainPanel; 
    JButton button; 
    Clipboard cb; 
    public ClipboardTest2() { 
    mainFrame = new JFrame (  ); 
    mainPanel = new JPanel (); 
    button = new JButton ("Button"); 
    button.setIcon( new ImageIcon("candle.png") ); cb = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    button.addActionListener( new ActionListener(){ 
    public void actionPerformed( ActionEvent e){ 
    ButtonTextAndImageTransferable btait = 
    new ButtonTextAndImageTransferable(button); 
    cb.setContents( btait,btait ); 

    }); mainPanel.add( button ); 
    mainFrame.getContentPane().add( mainPanel ); 
    mainFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
    mainFrame.pack(); 
    mainFrame.setLocationRelativeTo(null); 
    mainFrame.setVisible( true ); 

    public static void main(String[] args)  

    SwingUtilities.invokeLater( new Runnable(){ 
    public void run(){ 
    new ClipboardTest2(); 

    }); 


    class ButtonTextAndImageTransferable extends ImageIcon implements Transferable,ClipboardOwner{ 
    DataFlavor[] flavors; 
    JButton button; 
    public void lostOwnership(Clipboard clipboard, Transferable contents){ 
    System.out.println( "lostownership" ); 

    public ButtonTextAndImageTransferable( JButton button){ 
        flavors = new DataFlavor[2]; 
    flavors[0] =  DataFlavor.stringFlavor; 
    flavors[1] =  DataFlavor.imageFlavor; 
    this.button = button ; 

    public DataFlavor[] getTransferDataFlavors(){ 
    return flavors; 

    public Object getTransferData(DataFlavor flavor){ 
    if( flavor.equals( flavors[0] ) ) 

    return button.getText(); 
    }else{ 
    if( flavor.equals( flavors[1] ) ){ 
    ImageIcon icon = (ImageIcon)button.getIcon(); 
    return icon.getImage(); 


    return null; 

    public boolean isDataFlavorSupported(DataFlavor flavor){ 
    if( flavor.equals( flavors[0] ) || 
    flavor.equals( flavors[1] )) 
    return true; 
    return false; 

    } core java volumn2 里就有关于你想要得 
      

  2.   


    import   java.awt.*;   
    import   javax.swing.*;   
    import   java.awt.event.*;   
    import   javax.swing.event.*;   
    import   java.awt.dnd.*;   
    import   java.awt.datatransfer.*;   
    import   java.io.*;   
    class   ClipboardTest2     
    {   
    JFrame   mainFrame;   
    JPanel   mainPanel;   
    JButton   button;   
    Clipboard   cb;   
    public   ClipboardTest2()   {   
    mainFrame   =   new   JFrame   (     );   
    mainPanel   =   new   JPanel   ();   
    button   =   new   JButton   ("Button");   
    button.setIcon(   new   ImageIcon("candle.png")   );   cb   =   Toolkit.getDefaultToolkit().getSystemClipboard();   
    button.addActionListener(   new   ActionListener(){   
    public   void   actionPerformed(   ActionEvent   e){   
    ButtonTextAndImageTransferable   btait   =   
    new   ButtonTextAndImageTransferable(button);   
    cb.setContents(   btait,btait   );   
    }   
    });   mainPanel.add(   button   );   
    mainFrame.getContentPane().add(   mainPanel   );   
    mainFrame.setDefaultCloseOperation(   JFrame.EXIT_ON_CLOSE   );   
    mainFrame.pack();   
    mainFrame.setLocationRelativeTo(null);   
    mainFrame.setVisible(   true   );   
    }   
    public   static   void   main(String[]   args)     
    {   
    SwingUtilities.invokeLater(   new   Runnable(){   
    public   void   run(){   
    new   ClipboardTest2();   
    }   
    });   
    }   
    }   
    class   ButtonTextAndImageTransferable   extends   ImageIcon   implements   Transferable,ClipboardOwner{   
    DataFlavor[]   flavors;   
    JButton   button;   
    public   void   lostOwnership(Clipboard   clipboard,   Transferable   contents){   
    System.out.println(   "lostownership"   );   
    }   
    public   ButtonTextAndImageTransferable(   JButton   button){   
            flavors   =   new   DataFlavor[2];   
    flavors[0]   =     DataFlavor.stringFlavor;   
    flavors[1]   =     DataFlavor.imageFlavor;   
    this.button   =   button   ;   
    }   
    public   DataFlavor[]   getTransferDataFlavors(){   
    return   flavors;   
    }   
    public   Object   getTransferData(DataFlavor   flavor){   
    if(   flavor.equals(   flavors[0]   )   )   
    {   
    return   button.getText();   
    }else{   
    if(   flavor.equals(   flavors[1]   )   ){   
    ImageIcon   icon   =   (ImageIcon)button.getIcon();   
    return   icon.getImage();   
    }   
    }   
    return   null;   
    }   
    public   boolean   isDataFlavorSupported(DataFlavor   flavor){   
    if(   flavor.equals(   flavors[0]   )   ¦ ¦   
    flavor.equals(   flavors[1]   ))   
    return   true;   
    return   false;   
    }   
    }   恩,受教了