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