Я создал программу с использованием JavaFX, где мне нужно вставить в таблицу Excel.Разделение JavaFX Буфер обмена getString() странное поведение
Я следил за некоторыми учебниками онлайн, но заметил странное поведение в том, как работает код вставки. Через некоторое время я выделил проблему на следующий код.
public void handlePaste() {
Clipboard clipboard = Clipboard.getSystemClipboard();
if (clipboard.hasString()) {
//start from the point that has focus
// abort if there's not cell selected to start with
if (getSelectionModel().getSelectedCells().size() == 0) {
return;
}
// get the cell position to start with
TablePosition pasteCellPosition = getFocusModel().getFocusedCell();
String pasteString = Clipboard.getSystemClipboard().getString();
int rowClipboard = -1;
Iterable<String> rowStrings = Splitter.on("\n").omitEmptyStrings().split(pasteString);
System.out.println("Print Rows");
for (String rowString : rowStrings) {
System.out.println(rowString);
System.out.println(rowString + " printing again");
}
for (String rowString : rowStrings) {
rowClipboard++;
Iterable<String> columnStrings = Splitter.on("\t").split(rowString);
int colClipboard = -1;
System.out.println("Printing Columns");
for (String columnString : columnStrings) {
System.out.println(columnString);
System.out.println(columnString + " printing again");
}
}
}
}
Я использую выходной оператор, чтобы продемонстрировать проблему. В принципе, я разделяю содержимое строки на основе и символы «\ n» и «\ t». Проблема заключается в том, что когда я пытаюсь что-либо сделать с помощью разделенных строк, строка просто ... DISAPPEARS ... Выводные инструкции, которые я вставляю, демонстрируют это.
Предположим, что строка в буфере обмена
l a
l b
l c
Тогда ожидаемый результат должен быть
Print rows
l a
l a printing again
l b
l b printing again
r c
r c printing again
Printing Columns
l
l again
a
a again
l
l again
b
b again
r
r again
c
c again
Но выход заканчивает тем, что
Print rows
l a
printing again
l b
printing again
r c
printing again
Printing Columns
l
again
a
again
l
again
b
again
r
again
c
again
Обратите внимание, как, когда я пытаюсь добавьте «печать снова» в строку разделения, я просто получаю пустые строки.
Я попытался исправить проблему с помощью подстроки и с помощью стандартных методов расщепления строк Java, и я получил то же поведение.
Наконец, чтобы исправить это, я просто использовал буфер обмена java.awt вместо буфера обмена JavaFX и вдруг ... он сработал!
java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
java.awt.datatransfer.Clipboard awtClipboard = toolkit.getSystemClipboard();
try {
pasteString = (String) awtClipboard.getData(java.awt.datatransfer.DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException ex) {
} catch (IOException ex) {
}
Используя приведенные выше строки кода, чтобы получить pasteString вместо буфера обмена JavaFX исправили проблему, и теперь я получаю ожидаемое поведение и выход.
На данный момент я придерживаюсь вышеуказанного исправления, но кажется странным, что буфер обмена JavaFX создает такое поведение, когда буфер обмена awt этого не делает. Может ли кто-нибудь объяснить, почему это происходит? Это ошибка с буфером обмена JavaFX?
Использование 'System.getProperty (« line.separator »)' вместо '' \ n "' исправлено для меня. –
Спасибо. Кажется, это работает. – Aceplace