java.awt.datatransfer.lipboardの複製画像などについて
昨日はRobotについてスクリーンショットを実現するためのプログラムを回しました。その後は写真のコピーなどの機能を加えたいです。
試してみましたが、クリップボードは次のようなものです。
java.awt.datatransfer.lipboard clipboard=java.awt.Toolkit.get Default Toolkit().gets System Clipboard()//システムクリップボードを取得します。
以前使った時はコピー文字などのStringを使っていましたが、画像Imageはコピーしたことがありません。
調べて、次のようにまとめました。
Javaではjava.awt.datatransfer.lipboard類を使ってカットボードを記述しています。
システムカットボードはClipboard syssc=Toolkit.get Default Toolkit()を通して.get System Clipboard()
内容をクリップボードに書き込みます。またはクリップボードから内容を読み取る場合、いくつかのよく使われている方法はクリップボードのテキストデータと画像データを読み書きします。
1.クリップボードにテキストデータを書きます。
2.指定したクリップボードからテキストの内容を取得する
3.カットボードに画像を書きます。
4.クリップボードから画像を読み取る
ついでに簡単な例をつけて、直接運行できます。
APIを通じて紹介されていますが、他のものもコピーできるようです。試してみてください。まず資料を貼り付けてください。
フィールドの概要
DataFlavor=java.awt.datatransfer.DataFlavor.strigFlaavor/データをドラッグ&ドロップしている間、またはファイルシステムにおいて、各インスタンスがクリップボードに表示されている場合、データフォーマットの不透明な概念を表しています。システムメモリにあるものはどのタイプですか?ここのストリングFlavorは文字のタイプです。
if(transferable.isData Flavo Supported)//もしXXタイプだったら.flavorを転送します。
ここで判断すると、テキストの種類なら、私達は取得します。
このように取得できます。str=(String)transferable.get TransferData;
このようにクリップボードのものをgetして、やっとString型に強制して間違いがないようにします。
他のタイプもこのように判断して読みます。
試してみましたが、クリップボードは次のようなものです。
java.awt.datatransfer.lipboard clipboard=java.awt.Toolkit.get Default Toolkit().gets System Clipboard()//システムクリップボードを取得します。
以前使った時はコピー文字などのStringを使っていましたが、画像Imageはコピーしたことがありません。
調べて、次のようにまとめました。
Javaではjava.awt.datatransfer.lipboard類を使ってカットボードを記述しています。
システムカットボードはClipboard syssc=Toolkit.get Default Toolkit()を通して.get System Clipboard()
内容をクリップボードに書き込みます。またはクリップボードから内容を読み取る場合、いくつかのよく使われている方法はクリップボードのテキストデータと画像データを読み書きします。
1.クリップボードにテキストデータを書きます。
protected static void setClipboardText(Clipboard clip, String writeMe) {
Transferable tText = new StringSelection(writeMe);
clip.setContents(tText, null);
}
2.指定したクリップボードからテキストの内容を取得する
protected static String getClipboardText(Clipboard clip) throws Exception{
//
Transferable clipT = clip.getContents(null);
if (clipT != null) {
//
if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
return (String)clipT.getTransferData(DataFlavor.stringFlavor);
}
return null;
}
3.カットボードに画像を書きます。
protected static void setClipboardImage(final Image image) {
Transferable trans = new Transferable(){
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.imageFlavor };
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.imageFlavor.equals(flavor);
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if(isDataFlavorSupported(flavor))
return image;
throw new UnsupportedFlavorException(flavor);
}
};
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null);
}
4.クリップボードから画像を読み取る
public static Image getImageFromClipboard() throws Exception{
Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable cc = sysc.getContents(null);
if (cc == null)
return null;
else if(cc.isDataFlavorSupported(DataFlavor.imageFlavor))
return (Image)cc.getTransferData(DataFlavor.imageFlavor);
return null;
}
ついでに簡単な例をつけて、直接運行できます。
package com.testCutAndPaste;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class CutAndPaste extends JFrame {
private JMenuBar mb = new JMenuBar();
private JMenu edit = new JMenu("Edit");
private JMenuItem cut = new JMenuItem("Cut"),
copy = new JMenuItem("Copy"),
paste = new JMenuItem("Paste");
private JTextArea text = new JTextArea(20, 20);
private Clipboard clipbd = getToolkit().getSystemClipboard();
public CutAndPaste() {
cut.addActionListener(new CutL());
copy.addActionListener(new CopyL());
paste.addActionListener(new PasteL());
edit.add(cut);
edit.add(copy);
edit.add(paste);
mb.add(edit);
setJMenuBar(mb);
getContentPane().add(text);
}
class CopyL implements ActionListener {
public void actionPerformed(ActionEvent e) {
String selection = text.getSelectedText();
if (selection == null)
return;
StringSelection clipString = new StringSelection(selection);
clipbd.setContents(clipString, clipString);
}
}
class CutL implements ActionListener {
public void actionPerformed(ActionEvent e) {
String selection = text.getSelectedText();
if (selection == null)
return;
StringSelection clipString = new StringSelection(selection);
clipbd.setContents(clipString, clipString);
text.replaceRange("", text.getSelectionStart(), text
.getSelectionEnd());
}
}
class PasteL implements ActionListener {
public void actionPerformed(ActionEvent e) {
Transferable clipData = clipbd.getContents(CutAndPaste.this);
try {
String clipString = (String) clipData
.getTransferData(DataFlavor.stringFlavor);
text.replaceRange(clipString, text.getSelectionStart(), text
.getSelectionEnd());
} catch (Exception ex) {
System.err.println("Not String flavor");
}
}
}
public static void main(String[] args) {
run(new CutAndPaste(), 300, 200);
}
public static void run(JFrame frame, int width, int height) {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.setVisible(true);
}
}
APIを通じて紹介されていますが、他のものもコピーできるようです。試してみてください。まず資料を貼り付けてください。
フィールドの概要
static DataFlavor
imageFlavor
DataFlavor
はJava Image類を表し、そのうち:representation Class=java.awt.Image mimeType=「image/x-java-mage」static DataFlavor
javaFileListFlavor
ファイルリストをJavaに入力するには、このタイプ/サブタイプのDataFlavor
およびjava.util.List
の表示形式クラスが必要である。static String
javaJVMLocalObjectMimeType
1つの参照を、関連MIME Contintタイプを持たない任意のJavaオブジェクト参照に変換するには(Transferable
インターフェースWITHIN THE_SAME JVMをまたぐ)、このタイプ/サブタイプを有するDataFlavor
を使用する必要があり、representationClass
を超えて伝達されるクラス/インターフェースのタイプであるTransferable
。static String
javaRemoteObjectMimeType
モバイルリンクをドラッグ&ドロップACTION_LINK
によってRemoteオブジェクトに渡すためには、Mime Controntタイプのaplication/x-java-remote-objectが使用されるべきであり、DataFlavor
の形式クラスは、伝送するRemote
インターフェースのタイプを示す。static String
javaSerializedObjectMimeType
MIME Conteetタイプのaplication/x-java-serialized objectは、長い間Javaオブジェクトのパターンを表しています。static DataFlavor
plainTextFlavor
時代遅れ 1.3から始まります。DataFlavor.getReaderForText(Transferable)
の代わりにTransferable.getTransferData(DataFlavor.plainTextFlavor)
を使用する。static DataFlavor
stringFlavor
DataFlavor
はJava Unicode Stringクラスを表しています。ここで、representation Class=java.lang.String mimeType=「appliation/x-java-serializd-oject」DataFlavor=java.awt.datatransfer.DataFlavor.strigFlaavor/データをドラッグ&ドロップしている間、またはファイルシステムにおいて、各インスタンスがクリップボードに表示されている場合、データフォーマットの不透明な概念を表しています。システムメモリにあるものはどのタイプですか?ここのストリングFlavorは文字のタイプです。
if(transferable.isData Flavo Supported)//もしXXタイプだったら.flavorを転送します。
ここで判断すると、テキストの種類なら、私達は取得します。
このように取得できます。str=(String)transferable.get TransferData;
このようにクリップボードのものをgetして、やっとString型に強制して間違いがないようにします。
他のタイプもこのように判断して読みます。