2011-07-15 31 views

Odpowiedz

200

To działa na mnie i jest dość prosta:

importu tych:

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

a następnie umieścić ten fragment kodu gdziekolwiek chcesz zmienić Schowek:

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

Po prostu próbowałem i działa. Nie wiem, czy są jakieś błędy "dobrych praktyk", ale rozwiąże to Twój problem!

LH

+1

możemy setContents() z właścicielami zbyt http://stackoverflow.com/questions/3591945/copying-to-clipboard-in-java –

+0

@AquariusPower Wydaje się, że przechodząc 'stringSelection' jako 2 argument 'setContents (..)' zbyt, czyniąc go 'ClipboardOwner', jak w połączonej odpowiedzi, nie ma znaczenia: patrząc na [źródło] (http://grepcode.com/file/repository.grepcode.com/java /root/jdk/openjdk/8u40-b25/java/awt/datatransfer/StringSelection.java#StringSelection.lostOwnership%28java.awt.datatransfer.Clipboard%2Cjava.awt.datatransfer.Transferable%29), jedyna metoda obiektu 'ClipboardOwner 'że implementuje, mianowicie' lostOwnership (..) ', jest puste. Tak więc drugi argument wydaje się być całkowicie opcjonalnym wywołaniem zwrotnym. –

+0

@EvgeniSergeev może się przydać, jeśli rozszerzymy StringSelection :) –

10

następujące klasy pozwala na kopiowanie/wklejanie String do/ze schowka.

import java.awt.AWTException; 
import java.awt.HeadlessException; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.datatransfer.Clipboard; 
import java.awt.datatransfer.DataFlavor; 
import java.awt.datatransfer.StringSelection; 
import java.awt.datatransfer.UnsupportedFlavorException; 
import java.awt.event.KeyEvent; 
import java.io.IOException; 

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(); 

     robot.keyPress(KeyEvent.VK_CONTROL); 
     robot.keyPress(KeyEvent.VK_V); 
     robot.keyRelease(KeyEvent.VK_CONTROL); 
     robot.keyRelease(KeyEvent.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(); 
     Clipboard systemClipboard = defaultToolkit.getSystemClipboard(); 

     return systemClipboard; 
    } 
} 
+1

Może potrzebować trochę logiki do wklejenia w OS X, ponieważ jest wyjątkowy. –

3

Jest to przyjęta odpowiedź napisany w ozdobnym sposób:

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

znalazłem lepszy sposób to zrobić, dzięki czemu można uzyskać wejście od txtbox lub coś być generowane w tym tekście i kliknij przycisk, aby to zrobić. Oto kod do skopiowania do schowka roboczego (2017/2018)!

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

Mam nadzieję, że to pomoże! – ElementCodez

+0

Co masz na myśli przez "2017/2018"? Określona wersja Java? Którą wersję * użyłeś *, której używasz? –

Powiązane problemy