Java kullanarak metin panoya kopyalama


139

Metnin bir JTablehücresinden panoya kopyalamak ve Microsoft Word gibi diğer programlara yapıştırılabilmesini sağlamak istiyorum. Metin var JTable, ama panoya kopyalamak nasıl emin değilim.

Yanıtlar:


270

Bu benim için çalışıyor ve oldukça basit:

Bunları içe aktarın:

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

Ardından, bu kod snippet'ini panoyu değiştirmek istediğiniz yere yerleştirin:

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

1
biz de sahibi ileContents () ayarlayabilirsiniz stackoverflow.com/questions/3591945/…
— Kova Gücü

@AquariusPower stringSelectionİkinci argüman olarak setContents(..)da geçmenin ClipboardOwner, bağlantılı cevapta olduğu gibi bunu yapmanın bir önemi yok gibi görünüyor: kaynağa bakmak, ClipboardOwneruyguladığı tek yöntem , yani lostOwnership(..)boş. Yani, ikinci argüman tamamen isteğe bağlı bir geri arama gibi görünüyor.
— Evgeni Sergeev

@EvgeniSergeev StringSelection'ı genişletirsek faydalı olabilir :)
— Aquarius Power

1
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
— Clojure'a Taşındı

Bunu hangi bağlamda test ettiniz? Bir GUI uygulamasından mı? Hangi platformda? Panoyu arka arkaya 100 kez ayarlamaya çalışır mı (her set arasında uygun bir duraklama ile)?
— Peter Mortensen

18

Dekoratif bir şekilde yazılmış kabul edilen cevap budur:

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

18

Aşağıdaki sınıf bir String'i panodan kopyalayıp yapıştırmanıza izin verir.

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
Özel olduğundan OS X'e yapıştırmak için bir mantık gerekebilir.
— Ben Leggiero

1
@BenLeggiero: Geç cevap ama OS Xdüzgün çalışmadığı takdirde daha iyi desteklemek için bir düzenleme önermek için çekinmeyin
— BullyWiiPlaza

1
bunu tekrar yapmam gerekirse güncellerim. Olasılıkla, sadece şimdiki OS kontrol ve dışarı takas oluyor VK_CONTROLiçin VK_METAo MacOS buysa.
— Ben Leggiero

İhtiyacım olan bu.
— 5377037

2

Bunu yapmanın daha iyi bir yolunu buldum, böylece bir txtbox'tan bir girdi alabilir veya o metin kutusunda bir şey oluşturulabilir ve bunu yapmak için bir düğmeyi tıklayabilirsiniz.

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" ile ne demek istiyorsun? Java'nın belirli bir sürümü mü? Hangi sürümü mi kullanmak?
— Peter Mortensen

1

İçin JavaFX tabanlı uygulamalar.

        //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 , birden çok veriyi (html, url, düz metin, resim) gibi çeşitli veri biçimlerinde kaydedebilir.

Daha fazla bilgi için resmi belgelere bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.