如何将clipbord中的值粘贴到listview javafx?

时间:2018-03-19 06:41:14

标签: java listview javafx

我试图实现一个代码,允许用户从tableview中复制值并将值粘贴到javafx中的Listview中。第一部分我已经成功实现了它,即我在tableview中创建了一个上下文菜单(Copy),并将值传给了剪贴板。

这是代码

    public void allowCopyAndPaste(){
MenuItem item = new MenuItem("Copy");
item.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {

        //ObservableList rowList = (ObservableList) scheduledCitizenTable.getSelectionModel().getSelectedItems();

        StringBuilder clipboardString = new StringBuilder();



            for (citizen cell : scheduledCitizenTable.getSelectionModel().getSelectedItems()) {
                if (cell == null) {
                    cell = null;
                }
                clipboardString.append(cell.getCitizenName());
                clipboardString.append('\t');
            }
            clipboardString.append('\n');


        final ClipboardContent content = new ClipboardContent();

        content.putString(clipboardString.toString());
        Clipboard.getSystemClipboard().setContent(content);
        System.out.println("testing paste"+content.size());

    }
});
ContextMenu menu = new ContextMenu();
menu.getItems().add(item);
scheduledCitizenTable.setContextMenu(menu);

}

现在问题的最后一部分,我想将从剪贴板获得的值粘贴到列表视图中 下面是listview的代码

public class EmployeeScheduledController implements Initializable {

@FXML
private JFXListView<String> employeeS;


@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
}    

}

总的来说,我只需要在listview中粘贴剪贴板中的值。有什么帮助吗?

更新

我在隧道中发现了一盏灯,所以我现在所做的就是将剪贴板设置为公共静态,然后当列表框窗口打开时将剪贴板中获得的值设置为列表框< / p>

employeeS.getItems().add(citizen.content.getString());

请注意,citizen是该类的对象,其中有表,employeeS是列表框

我现在遇到的困难是如何制作从tableview复制的每一行?

content = "Tom Jones James Alfred George"
例如,假设我已经从表中复制了内容,现在我想把它放在listview中,它会把整个字符串放在tableview中的单元格被连在一起,我需要放入例如,索引0的列表视图中的Tom,索​​引1的Listview中的Jones等...

1 个答案:

答案 0 :(得分:0)

到目前为止,你已经完成了艰难的任务。 因此,由于您能够复制所有内容,因此粘贴和拆分内容非常简单。 您所要做的就是从空格中分割内容字符串。你可以通过这样做来实现这个目标,

String[] names = content.split("\\s");

现在您可以使用foreach循环填充列表

for(String name : names){
   //put name into listView
}

修改

为避免名称冲突,最好附加符号或数字(或其他内容)。所以在我的情况下,在一个名字之后,我会附加'&amp;'签到剪贴板字符串。所以它看起来像,

clipboardString.append(cell.getCitizenName());
clipboardString.append("&");

所以在那之后,使用上面给出的相同逻辑,你可以将其拆分为,

String[] names = content.split("&");

然后您可以使用foreach循环填充列表视图