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
공지 사항 어떻게하려고 할 때 분할 문자열에 "print again"을 덧붙이면 간단히 빈 문자열이 생깁니다.
부분 문자열을 사용하여 문제를 해결하고 표준 Java 문자열 분할 메서드를 사용하여 동일한 문제가 발생했습니다.
마지막으로, 수정하기 위해 JavaFX 클립 보드 대신 java.awt 클립 보드를 사용했는데 갑자기 ... 작동했습니다! 대신 자바 FX 클립 보드의 pasteString를 얻을 수 위의 코드 줄을 사용하여
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) {
}
는 문제를 해결하고, 지금은 예상되는 동작과 출력을 얻을.
당분간 위의 수정 사항을 따르 겠지만, awt 클립 보드가없는 경우 JavaFX 클립 보드가이 동작을 생성하는 것은 이상한 것 같습니다. 아무도 이것이 왜 일어나는 지 설명 할 수 있습니까? JavaFX 클립 보드의 버그입니까?
'System.getProperty ("line.separator")'대신' "를 사용하십시오. \ n"'나를 고쳐주었습니다. –
고맙습니다. 이것이 효과가있는 것으로 보입니다. – Aceplace