public Node buildAgentCtrl() { _agentListPanel = new TitledPanel("Agents"); _agentListPanel.getStyleClass().add("agents-panel"); Node pane = _agentListPanel.getPane(); _agentListPanel.setFillWidth(true); pane.setOnDragOver( e -> { DnD.LocalClipboard clipboard = getLocalClipboard(); if (clipboard.hasContent(DnD.VALUE_FORMAT)) { Field field = clipboard.get(DnD.FIELD_FORMAT, Field.class); if (_acceptableFields.contains(field.getName())) { e.acceptTransferModes(TransferMode.COPY); e.consume(); } } }); pane.setOnDragDropped( e -> { DnD.LocalClipboard clipboard = getLocalClipboard(); String value = clipboard.get(DnD.VALUE_FORMAT, Object.class).toString(); String field = clipboard.get(DnD.FIELD_FORMAT, Field.class).getName(); // ensure we don't already have this field for (AgentInfo agent : _agents) { if (agent.field.equals(field) && agent.value.equals(value)) { e.consume(); return; } } addAgent(field, value); e.setDropCompleted(true); e.consume(); }); return _agentListPanel; }