জাভা ব্যবহার করে ক্লিপবোর্ডে পাঠ্য অনুলিপি করা হচ্ছে


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
আমরা মালিকদের সাথে খুব কম স্ট্যাকওভারফ্লো
কুম্ভ শক্তি

@ অ্যাকুরিয়াস পাওয়ারটি মনে হয় যে stringSelectionদ্বিতীয় যুক্তি setContents(..)হিসাবেও যুক্ত হওয়া, যুক্ত লিখিত ClipboardOwnerউত্তরের মতো এটির কোনও তাত্পর্য নেই: উত্সের দিকে তাকালে , ClipboardOwnerএটি প্রয়োগ করার একমাত্র পদ্ধতিটি lostOwnership(..)শূন্য। সুতরাং, ২ য় তর্কটি পুরোপুরি alচ্ছিক কলব্যাক বলে মনে হচ্ছে।
এভেজেনি সার্জিভ

@ এভেজেনি সার্জিভ এটি স্ট্রিংস্লেশন বাড়িয়ে দিলে এটি কার্যকর হতে পারে :)
কুম্ভ শক্তি

1
(-> (java.awt.Toolkit/getDefaultToolkit) .getSystemClipboard (.setContents (java.awt.datatransfer.StringSelection. "test") nil))
ক্লোজারে

কোন প্রসঙ্গে আপনি এটি পরীক্ষা করেছেন? জিইউআইয়ের আবেদন থেকে? কোন প্লাটফর্মে? এটি কি টানা 100 বার ক্লিপবোর্ড সেট করার কাজ করে (প্রতিটি সেটের মধ্যে কিছু উপযুক্ত বিরতি দিয়ে)?
পিটার মর্টেনসেন


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
@ বেনলেগিগিয়েরো: দেরিতে জবাবদিহিতা করুন তবে OS Xসঠিকভাবে কাজ না করতে পারলে আরও ভাল সমর্থন করার জন্য একটি সম্পাদনার পরামর্শ দিতে দ্বিধা বোধ করুন
বুলিওইপ্লাজা

1
যদি আমার আর কখনও এটি করা দরকার হয়, আমি আপডেট করব। সম্ভবত, এটা ঠিক বর্তমান অপারেটিং সিস্টেম পরীক্ষণ, এবং আউট সোয়াপিং VK_CONTROLজন্য VK_METAযদি এটা MacOS আছে।
বেন লেগিগেরো

এটি আমার এটির প্রয়োজন।
5377037

2

আমি এটি করার আরও ভাল উপায় খুঁজে পেয়েছি যাতে আপনি কোনও টেক্সটবক্স থেকে ইনপুট পেতে পারেন বা সেই পাঠ্য বাক্সে কিছু উত্পন্ন হতে পারে এবং এটি করতে একটি বোতামে ক্লিক করতে সক্ষম হোন!

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

ক্লিপবোর্ড কনটেন্ট বিভিন্ন ডেটা ফর্ম্যাটে যেমন (এইচটিএমএল, ইউআরএল, সরল পাঠ্য, চিত্র) একাধিক ডেটা সংরক্ষণ করতে পারে।

আরও তথ্যের জন্য দেখুন সরকারী ডকুমেন্টেশন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.