以下のコードは Java で記述されています。回答に要する時間を簡略化するために短縮されています。完全なコードはスクリーンショットを撮り、それをクリップボードにコピーします。(ソース: http://www.coderanch.com/t/333565/GUI/java/BufferedImage-System-Clipboard )
Jython 2.7 プログラムで使用しようとしています。すべてのプライベート クラスが関係しているため、このコードを変更する方法について混乱しています。
public class ClipboardImage implements ClipboardOwner {
public ClipboardImage() {
try {
Robot robot = new Robot();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screen = new Rectangle( screenSize );
BufferedImage i = robot.createScreenCapture( screen );
TransferableImage trans = new TransferableImage( i );
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
c.setContents( trans, this );
}
catch ( AWTException x ) {
x.printStackTrace();
System.exit( 1 );
}
}
public static void main( String[] arg ) {
ClipboardImage ci = new ClipboardImage();
}
public void lostOwnership( Clipboard clip, Transferable trans ) {
System.out.println( "Lost Clipboard Ownership" );
}
private class TransferableImage implements Transferable {
Image i;
public TransferableImage( Image i ) {
this.i = i;
}
public Object getTransferData( DataFlavor flavor )
throws UnsupportedFlavorException, IOException {
if ( flavor.equals( DataFlavor.imageFlavor ) && i != null ) {
return i;
}
else {
throw new UnsupportedFlavorException( flavor );
}
}
public DataFlavor[] getTransferDataFlavors() {
DataFlavor[] flavors = new DataFlavor[ 1 ];
flavors[ 0 ] = DataFlavor.imageFlavor;
return flavors;
}
public boolean isDataFlavorSupported( DataFlavor flavor ) {
DataFlavor[] flavors = getTransferDataFlavors();
for ( int i = 0; i < flavors.length; i++ ) {
if ( flavor.equals( flavors[ i ] ) ) {
return true;
}
}
return false;
}
}
}
私はそれを次のコードに翻訳することができました:
robot = Robot()
screenSize = Toolkit.getDefaultToolkit().getScreenSize()
screen = Rectangle(screenSize)
i = robot.createScreenCapture(screen)
flavors = DataFlavor.imageFlavor.equals(i)
trans = Transferable.getTransferDataFlavors(flavors)
c = Toolkit.getDefaultToolkit().getSystemClipboard()
c.setContents(trans, trans)
しかし、私は TypeError を取得しています:
getTransferDataFlavors(): 自己引数は java.awt.datatransfer.Transferable に強制できません。
を自分の画像に割り当ててから転送可能にする部分に苦労しているdataFlavor.imageFlavor
ので、クリップボードの内容に設定できます。