Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java clipboard + flavor 
V
    Опции темы
Samotnik
Дата 30.1.2010, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



привет 
Нужно реализовать буфер обмена "на уровне ОС" (нужно кроссплатформенное решение, но пока только для  Windows хотя бы ). 
"На уровне ОС"  - это означает, что необходима поддержка копирования из ОС в программу. Пример - делаю print screen, далее через ctrl+v  вставляю в свое приложение на java (приложение GUI - компонент JTree)  т.е.  нужна какая то поддержка Flavor чтобы приложение само определило, можно ли вставить или нет. 
Еще пример - в проводнике (или  ФМ не важно)  скопировать фильм (Ctrl +c )  и в приложение вставить как Ctrl +v -  по идее  Flavor  должен определить, что вставлять нужно не фильм, а только название (т.е.  титаник.avi)

Вобщем, хотелось бы услышать либо советы, либо примеры может какие есть. Типа делаю print screen окна - и затем  Ctrl+v  в приложение, и в нем появилась эта картинка smile 
Надеюсь, хоть немного понятно что требуется smile Если нет - объясню в понедельник по подробнее. 
PM MAIL   Вверх
dobrolub
Дата 30.1.2010, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Clipboard.getAvailableDataFalvors() возвратит все форматы которые доступны для объекта в буфере, а Clipboard.isDataFlavorAvailable(DataFlavor) вернёт true в случае когда в буфере есть данный Flavor. Если он есть, берите его с помощью Clipboard.getData(DataFlavor). В зависимости от Flavor он вернёт либо HTML, либо String, либо BufferedImage или другой, соответствующий Flavor объект.

Для объекта в буфере можно получить все его Flavors через Clipboard.getAvailableDataflavors(). Вот например для куска HTML (ужас, обрезано):

Код

[java.awt.datatransfer.DataFlavor[mimetype=text/rtf;representationclass=java.io.InputStream],
 java.awt.datatransfer.DataFlavor[mimetype=text/rtf;representationclass=java.nio.ByteBuffer],
......
vor[mimetype=text/plain;representationclass=[B;charset=US-ASCII]]


Сконструировать Flavor можно используя один из конструкторов с данными подсмотренными через availableFlavors.

Например, если будет на Clipboard image, то откроется в JFrame, a если не image, то распечатаются его flavors smile

Код

import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.datatransfer.*;

import javax.swing.*;

public class Test {
  public static void main(String[] args)
    throws Exception
  {
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Clipboard board = toolkit.getSystemClipboard();

    if (board.isDataFlavorAvailable(DataFlavor.imageFlavor)) {
      BufferedImage image
        = (BufferedImage) board.getData(DataFlavor.imageFlavor);
      Frame frame = new JFrame();
      JLabel label = new JLabel(new ImageIcon(image));
      frame.add(label, BorderLayout.CENTER);
      frame.pack();
      frame.setVisible(true);
    } else {
      System.out.println(Arrays.asList(board.getAvailableDataFlavors()));
    }
  }
}


Это сообщение отредактировал(а) dobrolub - 30.1.2010, 21:10
PM   Вверх
Samotnik
Дата 2.2.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Проблема решена.
я наверное немного не так выразился.
solution :
Нужно было создать доп класс, сделать ему  extends TransferHandler и переопределить основные методы smile  работает все наура.   smile 

dobrolub, все равно спасибо 

Это сообщение отредактировал(а) Samotnik - 3.2.2010, 00:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0848 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.