-2

以下のコードは 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ので、クリップボードの内容に設定できます。

4

1 に答える 1

-1
class TransferableImage(Transferable) :

     def __init__(self, image) :
             if not isinstance(image, Image) :
                      raise IllegalArgumentException("Parameter must be of type java.awt.Image")
             self.image = image

     def getTransferData(self, flavor) :
             if not isinstance(flavor, DataFlavor) :
                      raise IllegalArgumentException("Parameter must be of type java.awt.datatransfer.DataFlavor")
             if not flavor.equals(DataFlavor.imageFlavor) : 
                      raise UnsupportedFlavorException(flavor)
             return self.image

     def getTransferDataFlavors(self) :
             return [DataFlavor.imageFlavor];

     def isDataFlavorSupported(self, flavor) :
             if not isinstance(flavor, DataFlavor) :
                      raise IllegalArgumentException("Parameter must be of type java.awt.datatransfer.DataFlavor")
             return flavor in getTransferFlavors()

class ClipboardImage(ClipboardOwner) :

     def __init__(self) :
             robot = Robot()
             toolkit = Toolkit.getDefaultToolkit()
             screenSize = toolkit.getScreenSize()
             screen = Rectangle(screenSize)
             image = robot.createScreenCapture(screen)
             trans = TransferableImage(image)
             clipboard = toolkit.getSystemClipboard()
             clipboard.setContents(trans, self)

     def lostOwnership(self, clip, trans) :
             print("Lost Clipboard Ownership")


ci = ClipboardImage()
于 2016-03-04T21:03:26.360 に答える