जावा का उपयोग करके क्लिपबोर्ड पर पाठ की प्रतिलिपि बनाना


139

मैं टेक्स्ट JTableको क्लिपबोर्ड पर कॉपी करना चाहता हूं , जिससे यह माइक्रोसॉफ्ट वर्ड जैसे अन्य कार्यक्रमों में चिपकाया जा सके। मेरे पास से पाठ है 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
हम सेट कर सकते हैं () मालिक के साथ भी stackoverflow.com/questions/3591945/…
कुंभ पावर

@AquariusPower ऐसा लगता है कि stringSelection2 तर्क के रूप में setContents(..)भी गुजर रहा है, इसे बनाने के ClipboardOwnerरूप में, जुड़े हुए उत्तर में, इसका कोई महत्व नहीं है: स्रोत को देखते हुए , इसका एकमात्र तरीका ClipboardOwnerजो इसे लागू करता है, अर्थात्, lostOwnership(..)खाली है। तो, दूसरा तर्क पूरी तरह से वैकल्पिक कॉलबैक लगता है।
इवगेनी सर्गेव

@EvgeniSergeev यह उपयोगी हो सकता है अगर हम StringSelection :) का विस्तार करते हैं
कुंभ राशि

1
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
क्लोजर के लिए चित्रित

आपने यह किस संदर्भ में परीक्षण किया? एक जीयूआई आवेदन से? किस प्लेटफार्म पर? क्या यह क्लिपबोर्ड को एक पंक्ति में 100 बार सेट करने का काम करता है (प्रत्येक सेट के बीच कुछ उपयुक्त ठहराव के साथ)?
पीटर मोर्टेंसन

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
ओएस एक्स में चिपकाने के लिए कुछ तर्क की आवश्यकता हो सकती है क्योंकि यह विशेष है।
बेन लेगियरियो

1
@BenLeggiero: देर से जवाब लेकिन OS Xयह ठीक से काम नहीं करने के मामले में बेहतर समर्थन करने के लिए एक संपादन का सुझाव देने के लिए स्वतंत्र महसूस हो रहा है
BullyWiiPlaza

1
अगर मुझे कभी भी ऐसा करने की आवश्यकता होती है, तो मैं अपडेट करूंगा। संभवतः, यह सिर्फ वर्तमान OS की जाँच कर रहा है, और यदि यह macOS है VK_CONTROL, VK_METAतो इसके लिए स्वैप करना है ।
बेन लेगिएरो

मुझे इसकी आवश्यकता है।
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" से आपका क्या अभिप्राय है? जावा का एक विशेष संस्करण? कौन सा संस्करण था आप का उपयोग करें?
पीटर मोर्टेंसन

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, प्लेन टेक्स्ट, इमेज) में कई डेटा सेव कर सकता है।

अधिक जानकारी के लिए आधिकारिक दस्तावेज देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.