Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Copy,Paste,Cut


Автор: Swatch 2.8.2007, 18:59
Добрый вечер.

Поставили такую задачку, не знаю, как решить. Есть множество всяких компонентов на форме (текстфилды, текстэрии, таблички и т.д). Есть менюшка, в которой стандартно прописаны пункты: Copy, Paste, Cut. я знаю, что с клавиатуры и копирование, и вырезание, и вставка работают. Надо сделать так, чтобы и из этих пунктов меню все работало. Причем, надо сделать, чтобы вставлялось не только скопированный в данном приложении текст, но и текст, который копировался вне. Думаю, по аналогии с делфи, надо обратиться к какому-то глобальному клипборду. Вопрос в том, КАК это сделать??? Наверное, есть какие-то стандартные методы. Помогите, пожалуйста. Поделитесь, если есть, примерами.

Автор: LSD 2.8.2007, 22:29
Код
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
if(clipboard.isDataFlavorAvailable(DataFlavor.getTextPlainUnicodeFlavor()))
{
  Object data = clipboard.getData(DataFlavor.getTextPlainUnicodeFlavor());
}

Автор: Swatch 3.8.2007, 07:02
Спасибо, с копированием более-менее разобралась... вопрос другой. У меня на форме установлен кард лайаут, в нем 28 панелек на каждой минимум по 4 текстовых поля. как теперь указать, из какого поля копировать, вырезать и куда вставлять? Копирование, вырезание и вставку делаю из меню, то есть соответствующие процедуры пишу в классе главной формы. как узнать, в каком компоненте курсор или выделенный текст. Помогите, пожалуйста.

Автор: AlexeyVorotnikov 3.8.2007, 09:52
В классе KeyboardFocusManager есть методы getFocusOwner() и getGlobalFocusOwner() с помощью которых можно найти компонент, у которого фокус. 

Автор: Swatch 3.8.2007, 10:39
хммм.... подскажите еще, пожалуйста, как можно у владельца фокуса взять текст... то есть мы определили, кто владелец. но как теперь добраться до самого текста?!

Автор: AlexeyVorotnikov 3.8.2007, 10:55
Цитата(Swatch @  3.8.2007,  11:39 Найти цитируемый пост)
как теперь добраться до самого текста?! 

JTextComponent.getSelectedText()

Автор: Swatch 3.8.2007, 12:08
Я, возможно туплю, но что-то так и не поняла, как это сделать. напишите, пожалуйста, какой-нить хоть маленький пример. Как использовать вместе методы: JTextComponent.getSelectedText()  и getFocusOwner() и getGlobalFocusOwner().

Автор: AlexeyVorotnikov 3.8.2007, 12:19
Чисто теоретический пример (на практике не проверял):
Код

Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();

if (component instanceof JTextComponent) {
    JTextComponent jTextComponent = (JTextComponent) component;
    String selectedText = jTextComponent.getSelectedText();
} else {
    throw new Exception("Focus is not on a JTextComponent");
}


Автор: Swatch 3.8.2007, 12:32
Написала вот так:

Код

        Component component = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
        String selectedText = "";
         if (component instanceof JTextComponent) {
            JTextComponent jTextComponent = (JTextComponent)component;
            selectedText = jTextComponent.getSelectedText();
        } else {
            jOptionPane1.showMessageDialog(this, "Text isn't selected");
        }
        if (selectedText.length() == 0){
            return;
        } 
        StringSelection clipString = new StringSelection(selectedText);
        clipboard.setContents(clipString,clipString);


Не работает:( smile Может Вы заметите ошибку?

Автор: AlexeyVorotnikov 3.8.2007, 12:36
Цитата(Swatch @  3.8.2007,  13:32 Найти цитируемый пост)
Не работает

Что именно не работает?

Автор: LSD 3.8.2007, 13:08
Модератор: Пожалуйста, один топик - один вопрос.

Автор: Swatch 3.8.2007, 13:40
Это был метож копирования. после нажатия на пункт меню Copy копирование не происходит. пишет "Text isn't selected". но текст в текстфилде я выделяю.

Автор: AlexeyVorotnikov 3.8.2007, 13:51
Есть у меня подозрение, что в момент выбора пункта меню текстовый компонент теряет фокус и поэтому не находится этим методом.
Дальше это дело надо дебажить более подробно.

Автор: Swatch 6.8.2007, 07:58
Угу, у меня тож такое подозрение... но что все-таки мне делать с копированием? Может как-то определить панель, на котрой есть текстовый компонент, в котором выделен текст? а потом взять этот текст? как сделать копирование, вставку и вырезание?? smile  smile  smile 

Автор: dorogoyIV 6.8.2007, 09:40
если теряешь фокус, то вот есть пример: http://forum.vingrad.ru/index.php?showtopic=166347&view=findpost&p=1216518

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)