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/...
물병 전원

그것은 지나가는 것 같다 @AquariusPower stringSelection의 2 인자로 setContents(..), 너무 그것을 ClipboardOwner링크 대답으로, 의미가없는 다음을보고 소스 의 유일한 방법 ClipboardOwner이 구현, 즉 것으로 lostOwnership(..), 비어 있습니다. 따라서 두 번째 인수는 완전히 선택적 콜백 인 것 같습니다.
Evgeni Sergeev 2016 년

@EvgeniSergeev StringSelection을 확장하면 유용 할 수 있습니다 :)
Aquarius Power

1
Clojure로 이식 :(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
NikoNyrh

어떤 상황에서 이것을 테스트 했습니까? GUI 응용 프로그램에서? 어느 플랫폼에서? 클립 보드를 한 번에 100 번 설정하면 작동합니까 (각 세트 사이에 적절한 일시 중지가 있습니까)?
피터 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

1
@BenLeggiero : 늦은 대답하지만 지원 수정 제안 주시기 OS X제대로 작동하지 않는 경우에 더 나은
BullyWiiPlaza

1
다시이 작업을 수행해야하는 경우 업데이트하겠습니다. 가능성, 그냥 현재의 OS를 확인하고, 스와핑 있어요 VK_CONTROL위해 VK_META이 맥 OS의 경우.
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? 어떤 버전을 않았다 당신은 사용할 수 있습니까?
피터 Mortensen

1

들어 자바 FX 기반 응용 프로그램.

        //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, 일반 텍스트, 이미지)와 같은 여러 데이터 형식으로 여러 데이터를 저장할 수 있습니다.

자세한 내용은 공식 문서를 참조하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.