Javaを使用してクリップボードにテキストをコピーする


139

テキストをJTableのセルからクリップボードにコピーして、Microsoft Wordなどの他のプログラムに貼り付けられるようにします。からのテキストがありますが、JTableそれをクリップボードにコピーする方法がわかりません。

回答:


270

これは私にとってはうまくいき、非常に簡単です:

これらをインポート:

import java.awt.datatransfer.StringSelection;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;

そして、クリップボードを変更したい場所に次のコードスニペットを配置します。

String myString = "This text will be copied into clipboard";
StringSelection stringSelection = new StringSelection(myString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);

1
所有者もsetContents()でスタックできます。stackoverflow.com/ questions / 3591945 /
Aquarius Power

@AquariusPower stringSelection2番目の引数として渡すことsetContents(..)も、ClipboardOwnerリンクされた回答のようににしても意味がないようです。ソースを見ると、ClipboardOwnerそれが実装する唯一のメソッド、つまりlostOwnership(..)が空です。したがって、2番目の引数は完全にオプションのコールバックのようです。
Evgeni Sergeev 2016年

@EvgeniSergeev StringSelectionを拡張すると便利な場合があります:)
Aquarius Power

1
Clojureに移植:(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
NikoNyrh 2017

これをどのコンテキストでテストしましたか?GUIアプリケーションから?どのプラットフォームで?クリップボードを100回続けて設定しますか(各セットの間に適切な一時停止があります)?
Peter Mortensen

18

これは装飾的な方法で書かれた受け入れられた答えです:

Toolkit.getDefaultToolkit()
        .getSystemClipboard()
        .setContents(
                new StringSelection(txtMySQLScript.getText()),
                null
        );

18

次のクラスを使用すると、クリップボードとの間で文字列をコピーして貼り付けることができます。

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;

import static java.awt.event.KeyEvent.*;
import static org.apache.commons.lang3.SystemUtils.IS_OS_MAC;

public class SystemClipboard
{
    public static void copy(String text)
    {
        Clipboard clipboard = getSystemClipboard();
        clipboard.setContents(new StringSelection(text), null);
    }

    public static void paste() throws AWTException
    {
        Robot robot = new Robot();

        int controlKey = IS_OS_MAC ? VK_META : VK_CONTROL;
        robot.keyPress(controlKey);
        robot.keyPress(VK_V);
        robot.keyRelease(controlKey);
        robot.keyRelease(VK_V);
    }

    public static String get() throws Exception
    {
        Clipboard systemClipboard = getSystemClipboard();
        DataFlavor dataFlavor = DataFlavor.stringFlavor;

        if (systemClipboard.isDataFlavorAvailable(dataFlavor))
        {
            Object text = systemClipboard.getData(dataFlavor);
            return (String) text;
        }

        return null;
    }

    private static Clipboard getSystemClipboard()
    {
        Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
        return defaultToolkit.getSystemClipboard();
    }
}

1
OS Xでの貼り付けには特別なため、いくつかのロジックが必要になる場合があります。
Ben Leggiero、2015

1
@BenLeggiero:遅い答えですが、OS X適切に機能しない場合に備えて、サポートを改善するための編集を提案してください
BullyWiiPlaza

1
これをもう一度行う必要がある場合は、更新します。おそらく、それは現在のOSをチェックし、それがmacOS VK_CONTROLであるVK_METAかどうかをスワップアウトしているだけです。
Ben Leggiero

これは私がそれを必要とするものです。
5377037

2

私はそれを行うためのより良い方法を見つけたので、txtboxから入力を取得したり、そのテキストボックスで何かを生成したり、ボタンをクリックしてそれを実行したりできます。

import java.awt.datatransfer.*;
import java.awt.Toolkit;

private void /* Action performed when the copy to clipboard button is clicked */ {
    String ctc = txtCommand.getText().toString();
    StringSelection stringSelection = new StringSelection(ctc);
    Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
    clpbrd.setContents(stringSelection, null);
}

// txtCommand is the variable of a text box

1
「2017/2018」ってどういう意味?Javaの特定のバージョン?どのバージョンをんでしたあなたはでしょうか?
Peter Mortensen

1

以下のためのJavaFXベースのアプリケーション。

        //returns System Clipboard
        final Clipboard clipboard = Clipboard.getSystemClipboard();
        // ClipboardContent provides flexibility to store data in different formats
        final ClipboardContent content = new ClipboardContent();
        content.putString("Some text");
        content.putHtml("<b>Some</b> text");
        //this will be replaced by previous putString
        content.putString("Some different text");
        //set the content to clipboard
        clipboard.setContent(content);
       // validate before retrieving it
        if(clipboard.hasContent(DataFormat.HTML)){
            System.out.println(clipboard.getHtml());
        }
        if(clipboard.hasString()){
            System.out.println(clipboard.getString());
        }

ClipboardContentは、(html、url、plain text、image)のようないくつかのデータ形式で複数のデータを保存できます。

詳細については、公式ドキュメントを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.