下面列出了javafx.scene.control.TabPane.TabClosingPolicy#javafx.collections.ListChangeListener 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Infers the elementary changes constituting the change of the
* {@link ObservableList}.
*
* @param <E>
* The element type of the {@link ObservableList} that was
* changed.
* @param change
* The (atomic) change to infer elementary changes from.
* @return A list of elementary changes.
*/
protected static <E> List<ElementarySubChange<E>> getElementaryChanges(
ListChangeListener.Change<? extends E> change) {
List<ElementarySubChange<E>> elementarySubChanges = new ArrayList<>();
while (change.next()) {
if (change.wasReplaced()) {
elementarySubChanges.add(ElementarySubChange.replaced(
change.getRemoved(), change.getAddedSubList(),
change.getFrom(), change.getTo()));
} else if (change.wasRemoved()) {
elementarySubChanges.add(ElementarySubChange.removed(
change.getRemoved(), change.getFrom(), change.getTo()));
} else if (change.wasAdded()) {
elementarySubChanges.add(ElementarySubChange.added(
new ArrayList<>(change.getAddedSubList()),
change.getFrom(), change.getTo()));
} else if (change.wasPermutated()) {
// find permutation
int[] permutation = CollectionUtils.getPermutation(change);
elementarySubChanges.add(ElementarySubChange.<E> permutated(
permutation, change.getFrom(), change.getTo()));
}
}
change.reset();
return elementarySubChanges;
}
public ColorPalettePreviewField(SimpleColorPalette palette) {
super();
rects = new ArrayList<>();
listeners = new ArrayList<>();
setPalette(palette);
setMinWidth(RECT_HEIGHT * 10);
setMaxWidth(RECT_HEIGHT * 20);
setPrefWidth(palette.size() * RECT_HEIGHT);
validDrag = false;
palette.addListener((ListChangeListener<Color>) c -> {
while (c.next()) {
this.setPrefWidth(palette.size() * RECT_HEIGHT);
if (c.wasRemoved() && selected >= palette.size()) {
selected = palette.size() - 1;
}
}
updatePreview();
});
}
public InfoHBox() {
super();
setMouseTransparent(true);
// adjust size to 0 if there are no messages to show
getChildren().addListener((ListChangeListener<Node>) ch -> {
if (getChildren().isEmpty()) {
setMinWidth(0);
setSpacing(0);
setPadding(Insets.EMPTY);
} else {
setPadding(new Insets(5, 5, 5, 5));
setMinWidth(200);
setSpacing(5);
}
});
}
public void registerListener() {
this.getChildren().addListener((ListChangeListener.Change<? extends Node> c) -> adjustToolBarWidth());
setOnMouseClicked(mevt -> {
if (chart.toolBarPinnedProperty().isBound()) {
return;
}
chart.setToolBarPinned(!chart.isToolBarPinned());
});
chart.toolBarPinnedProperty().addListener((obj, valOld, valNew) -> {
if (valNew) {
chart.setPinnedSide(javafx.geometry.Side.TOP);
this.setBackground(new Background(new BackgroundFill(selectedColour, CornerRadii.EMPTY, Insets.EMPTY)));
} else {
chart.setPinnedSide(null);
this.setBackground(new Background(new BackgroundFill(defaultColour, CornerRadii.EMPTY, Insets.EMPTY)));
}
chart.requestLayout();
});
}
public DataViewer() {
super();
HBox.setHgrow(this, Priority.ALWAYS);
VBox.setVgrow(this, Priority.ALWAYS);
getStylesheets().add(getClass().getResource("DataViewer.css").toExternalForm());
dataViewRoot.getSubDataViews().addListener(subDataViewChangeListener);
dataViewRoot.activeSubViewProperty().addListener(activeSubDataViewChangeListener);
userToolBarItems.addListener((ListChangeListener<Node>) change -> updateToolBar());
showListStyleDataViews.addListener((ch, o, n) -> updateToolBar());
selectedViewProperty().addListener((ch, o, n) -> updateToolBar());
windowDecorationProperty().addListener((ch, o, n) -> updateWindowDecorations(dataViewRoot));
detachableWindowProperty().addListener((ch, o, n) -> updateDetachableWindowProperty(dataViewRoot));
windowDecorationVisible().addListener((ch, o, n) -> setWindowDecoration(Boolean.TRUE.equals(n) ? WindowDecoration.BAR : WindowDecoration.NONE));
closeWindowButtonVisibleProperty().addListener(closeWindowButtonHandler);
final Label spacer = new Label();
HBox.setHgrow(spacer, Priority.ALWAYS);
toolBar = new ToolBar(separator1, viewList, separator2, spacer);
this.setCenter(dataViewRoot);
requestLayout();
}
protected void rendererChanged(final ListChangeListener.Change<? extends Renderer> change) {
boolean dataSetChanges = false;
while (change.next()) {
// handle added renderer
change.getAddedSubList().forEach(renderer -> renderer.getDatasets().addListener(datasetChangeListener));
if (!change.getAddedSubList().isEmpty()) {
dataSetChanges = true;
}
// handle removed renderer
change.getRemoved().forEach(renderer -> renderer.getDatasets().removeListener(datasetChangeListener));
if (!change.getRemoved().isEmpty()) {
dataSetChanges = true;
}
}
if (dataSetChanges) {
datasetsChanged(null);
}
}
private void configureItemChangeListener() {
items.addListener((ListChangeListener<E>) c -> {
while (c.next()) {
if (c.wasRemoved())
getChildren().remove(c.getFrom(), c.getTo() + 1);
if (c.wasAdded()) {
for (int i = 0; i < c.getAddedSize(); i++) {
E item = c.getAddedSubList().get(i);
Node cell = getCellFactory().apply(this, item);
getChildren().add(i + c.getFrom(), cell);
}
}
}
});
}
protected void rendererChanged(final ListChangeListener.Change<? extends Renderer> change) {
FXUtils.assertJavaFxThread();
while (change.next()) {
// handle added renderer
change.getAddedSubList().forEach(renderer -> {
// update legend and recalculateLayout on datasetChange
renderer.getDatasets().addListener(datasetChangeListener);
// add listeners to all datasets already in the renderer
renderer.getDatasets().forEach(set -> set.addListener(dataSetDataListener));
});
// handle removed renderer
change.getRemoved().forEach(renderer -> {
renderer.getDatasets().removeListener(datasetChangeListener);
renderer.getDatasets().forEach(set -> set.removeListener(dataSetDataListener));
});
}
// reset change to allow derived classes to add additional listeners to renderer changes
change.reset();
requestLayout();
updateLegend(getDatasets(), getRenderers());
}
/**
* Native init method.
* Create VUFS folders tree view
* @param location
* @param resources
*/
@Override
public void initialize(URL location, ResourceBundle resources) {
//TODO: replace to getting elements from Repository
CheckBoxTreeItem<String> root = new CheckBoxTreeItem<>("Root");
root.setExpanded(true);
CheckBoxTreeItem<String> folder1 = new CheckBoxTreeItem<>("Folder1");
folder1.getChildren().addAll(
new CheckBoxTreeItem<>("MyFoto"),
new CheckBoxTreeItem<>("OtherFiles")
);
root.getChildren().addAll(
folder1,
new CheckBoxTreeItem<>("Documents"),
new CheckBoxTreeItem<>("WorkFiles"),
new CheckBoxTreeItem<>("Projects"));
// Create the CheckTreeView with the data
final CheckTreeView<String> checkTreeView = new CheckTreeView<>(root);
checkTreeView.getCheckModel().getCheckedItems()
.addListener((ListChangeListener<TreeItem<String>>) c -> {
System.out.println(checkTreeView.getCheckModel().getCheckedItems());
});
checkTreeView.setId("sync-tree-view");
container.getChildren().add(checkTreeView);
}
@Inject
public ProposalListPresentation(ProposalService proposalService,
BsqStateService bsqStateService,
MyProposalListService myProposalListService,
BsqWalletService bsqWalletService,
ProposalValidator proposalValidator) {
this.proposalService = proposalService;
this.bsqStateService = bsqStateService;
this.myProposalListService = myProposalListService;
this.bsqWalletService = bsqWalletService;
this.proposalValidator = proposalValidator;
bsqStateService.addBsqStateListener(this);
myProposalListService.addListener(this);
proposalService.getTempProposals().addListener((ListChangeListener<Proposal>) c -> {
updateLists();
});
proposalService.getProposalPayloads().addListener((ListChangeListener<ProposalPayload>) c -> {
updateLists();
});
}
private void monitorStages(ObservableList<? extends Window> observableStages) {
// first listen for changes
observableStages.addListener(new ListChangeListener<Window>() {
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Window> c) {
while (c.next()) {
if (c.wasRemoved()) {
for (Window removedStage : c.getRemoved()) {
unregisterStage(removedStage);
}
}
if (c.wasAdded()) {
for (Window addedStage : c.getAddedSubList()) {
registerStage(addedStage);
}
}
}
}
});
// then process already existing stages
for (Window stage : observableStages) {
registerStage(stage);
}
}
private void monitorScenes(ObservableList<Scene> observableScenes) {
// first listen for changes
observableScenes.addListener(new ListChangeListener<Scene>() {
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Scene> c) {
while (c.next()) {
if (c.wasRemoved()) {
for (Scene removedScene : c.getRemoved()) {
unregisterScene(removedScene);
}
}
if (c.wasAdded()) {
for (Scene addedScene : c.getAddedSubList()) {
registerScene(addedScene);
}
}
}
}
});
// then add existing values
for (Scene s : observableScenes) {
registerScene(s);
}
}
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends String> c) {
while (c.next()) {
if (c.wasRemoved()) {
for (String removedURI : c.getRemoved()) {
if (!isAManagedSourceURI(removedURI)) {
registrar.unregister(origin, removedURI);
}
}
}
if (c.wasAdded()) {
for (String newURI : c.getAddedSubList()) {
if (!isAManagedSourceURI(newURI)) {
registrar.register(origin, newURI, c.getList());
}
}
}
}
}
public MapPane(WorldRendererCanvas renderer) {
this.renderer = Objects.requireNonNull(renderer);
catchEvents = new Region();
ListChangeListener<Node> l = c -> {
getChildren().clear();
getChildren().addAll(decorationLayers);
getChildren().add(catchEvents);
getChildren().addAll(pinLayers);
getChildren().addAll(settingsLayers);
};
settingsLayers.addListener(l);
pinLayers.addListener(l);
decorationLayers.addListener(l);
catchEvents.setPickOnBounds(true);
EventHandler<? super Event> refireEvent = event -> decorationLayers.forEach(l1 -> l1.fireEvent(event));
catchEvents.addEventFilter(EventType.ROOT, refireEvent);
pinLayers.addListener((ListChangeListener<Node>) e -> {
while (e.next()) {
e.getRemoved().forEach(n -> n.removeEventFilter(EventType.ROOT, refireEvent));
e.getAddedSubList().forEach(n -> n.addEventFilter(EventType.ROOT, refireEvent));
}
});
decorationLayers.add(renderer);
}
@Override
public void onChanged(
ListChangeListener.Change<? extends Object> change) {
// System.out.println("Content changed " + change);
// XXX: An atomic operation (including setAll()) on the
// ObservableList will lead to an atomic change here; we do not have
// to iterate through the individual changes but may simply
// synchronize with the list as it emerges after the changes have
// been applied.
// while (change.next()) {
// if (change.wasRemoved()) {
// removeContentPartChildren(getHost(),
// ImmutableList.copyOf(change.getRemoved()));
// } else if (change.wasAdded()) {
// addContentPartChildren(getHost(),
// ImmutableList.copyOf(change.getAddedSubList()),
// change.getFrom());
// } else if (change.wasPermutated()) {
// throw new UnsupportedOperationException(
// "Reorder not yet implemented");
// }
// }
synchronizeContentPartChildren(getHost(), change.getList());
}
/**
* Adds a {@link ListChangeListener} to an {@link ObservableList}.
*
* @param list to add a listener to
* @param addAction action to be performed when an object was added to the {@link ObservableList}
* @param removeAction action to be performed when an object was removed
* from the {@link ObservableList}
* @param <T> type of the {@link ObservableList}
*/
public static <T> void addListListener(ObservableList<T> list,
Consumer<T> addAction,
Consumer<T> removeAction) {
list.addListener((ListChangeListener<? super T>) c -> {
while (c.next()) {
if (!c.wasPermutated() && !c.wasUpdated()) {
for (T remitem : c.getRemoved()) {
removeAction.accept(remitem);
}
for (T additem : c.getAddedSubList()) {
addAction.accept(additem);
}
}
}
});
}
public FilterController() {
Initialization.initializeFXML(this, "/fxml/pkt_capture/Filter.fxml");
PortsManager.getInstance().addPortServiceModeChangedListener(this::updateFilters);
updateFilters();
applyBtn.setOnAction(event -> {
onUpdateHandlers.forEach(UpdateFilterHandler::onFilterUpdate);
applyBtn.setDisable(true);
});
rxFilter
.getCheckModel()
.getCheckedItems()
.addListener((ListChangeListener<String>) c -> applyBtn.setDisable(!applyBtnDisabled));
txFilter
.getCheckModel()
.getCheckedItems()
.addListener((ListChangeListener<String>) c -> applyBtn.setDisable(!applyBtnDisabled));
bpfFilter
.textProperty()
.addListener((observableValue, oldValue, newValue) -> applyBtn.setDisable(!applyBtnDisabled));
}
protected void tableChanged(ListChangeListener.Change<? extends P> change) {
// while (change.next()) {
// if (change.wasPermutated()) {
// for (int i = change.getFrom(); i < change.getTo(); ++i) {
//
// }
// } else if (change.wasUpdated()) {
//
// } else {
// for (P remitem : change.getRemoved()) {
//
// }
// for (P additem : change.getAddedSubList()) {
// }
// }
// }
checkSelected();
}
public NotificationBarPane(Node content) {
super(content);
progressBar = new ProgressBar();
label = new Label("infobar!");
bar = new HBox(label);
bar.setMinHeight(0.0);
bar.getStyleClass().add("info-bar");
bar.setFillHeight(true);
setBottom(bar);
// Figure out the height of the bar based on the CSS. Must wait until after we've been added to the parent node.
sceneProperty().addListener(o -> {
if (getParent() == null) return;
getParent().applyCss();
getParent().layout();
barHeight = bar.getHeight();
bar.setPrefHeight(0.0);
});
items = FXCollections.observableArrayList();
items.addListener((ListChangeListener<? super Item>) change -> {
config();
showOrHide();
});
}
public DescriptiveStatisticsTimelineView(final ObservableList<Double> scores) {
super(new NumberAxis(), new NumberAxis());
// defining the axes
this.getXAxis().setLabel("elapsed time (s)");
// defining a series
this.scores = scores;
this.performanceSeries = new Series<>();
this.getData().add(this.performanceSeries);
this.update();
scores.addListener(new ListChangeListener<Double>() {
@Override
public void onChanged(final Change<? extends Double> c) {
DescriptiveStatisticsTimelineView.this.update();
}
});
}
private void createContextMenu()
{
// Publish selected items as PV
final ListChangeListener<PVInfo> sel_changed = change ->
{
final List<ProcessVariable> pvs = change.getList()
.stream()
.map(info -> new ProcessVariable(info.name.get()))
.collect(Collectors.toList());
SelectionService.getInstance().setSelection(PVListApplication.DISPLAY_NAME, pvs);
};
table.getSelectionModel().getSelectedItems().addListener(sel_changed);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
// Context menu with selection-based entries, i.e. PV contributions
final ContextMenu menu = new ContextMenu();
table.setOnContextMenuRequested(event ->
{
menu.getItems().clear();
ContextMenuHelper.addSupportedEntries(table, menu);
menu.show(table.getScene().getWindow());
});
table.setContextMenu(menu);
}
public Handle(int idx, ObservableList<Double> pts) {
super(0, 0, TagBase.HANDLE_RADIUS);
index = idx;
points = pts;
setCenterX(points.get(idx * 2));
setCenterY(points.get(idx * 2 + 1));
var changeListListener = new ListChangeListener<Double>()
{
@Override
public void onChanged(Change<? extends Double> c) {
if (!c.next()) {
return;
}
if (c.wasReplaced()) {
setCenterX(points.get(idx * 2));
setCenterY(points.get(idx * 2 + 1));
}
}
};
parentProperty().addListener(((observable, oldValue, newValue) -> {
if (newValue == null) {
points.removeListener(changeListListener);
}
else {
points.addListener(changeListListener);
}
}));
setCursor(Cursor.CROSSHAIR);
setOnMousePressed(this::onMousePressed);
setOnMouseDragged(this::onMouseDragged);
setOnMouseReleased(this::onMouseReleased);
}
public void setSelectionModelListener(final ListChangeListener<C> listener) {
if (currentListener != null) {
table.getSelectionModel().getSelectedItems().removeListener(currentListener);
}
if (listener != null) {
table.getSelectionModel().getSelectedItems().addListener(listener);
}
currentListener = listener;
}
@Override
public void resultChanged(final List<C> selectedItems, final List<C> ignoredItems) {
Platform.runLater(() -> {
// remove the selection change listener
final ListChangeListener<C> listener = currentListener;
setSelectionModelListener(null);
// add items from the ignored list which are currently selected
final int[] selectionIndices = new int[selectedItems.size() + ignoredItems.size()];
if (!ignoredItems.isEmpty()) {
final List<C> currentSelection = table.getSelectionModel().getSelectedItems();
ignoredItems.forEach(item -> {
if (currentSelection.contains(item)) {
selectionIndices[selectedItems.size() + ignoredItems.indexOf(item)] = table.getItems().indexOf(item);
}
});
}
// add all items from the selected list
if (!selectedItems.isEmpty()) {
selectedItems.forEach(item -> {
selectionIndices[selectedItems.indexOf(item)] = table.getItems().indexOf(item);
});
}
// clear the table selection and then make the new selection
table.getSelectionModel().clearSelection();
if (selectionIndices.length > 0) {
table.getSelectionModel().selectIndices(selectionIndices[0], selectionIndices);
}
// add the selection change listener back
setSelectionModelListener(listener);
});
}
public AgeGroups() {
// if the agIncrementProperty or the agStartProperty change,
// invalidate the agMap and agNameMaps
agIncrementProperty.addListener(listener -> {invalidateMaps();});
agStartProperty.addListener(listener -> {invalidateMaps();});
customIncrementsProperty.addListener(listener -> {invalidateMaps();});
customIncrementObservableList.addListener((ListChangeListener<AgeGroupIncrement>) c -> {invalidateMaps(); });
customNamesProperty.addListener(listener -> {invalidateMaps();});
}
@SneakyThrows
public void setChildren(ObservableList<TreeItem<T>> children) {
Field fc = TreeItem.class.getDeclaredField("children");
fc.setAccessible(true);
fc.set(this, children);
Field f = TreeItem.class.getDeclaredField("childrenListener");
f.setAccessible(true);
ListChangeListener<TreeItem<T>> object = (ListChangeListener<TreeItem<T>>) f.get(this);
children.addListener(object);
}
@Override protected void registerListeners() {
super.registerListeners();
tile.timePeriodProperty().addListener(periodListener);
tile.getChartData().addListener((ListChangeListener<ChartData>) c -> {
while(c.next()) {
if (c.wasAdded()) {
c.getAddedSubList().forEach(chartData -> addData(chartData));
}
}
Set<ChartData> dataSet = tile.getChartData().stream().filter(data -> !dataList.contains(data)).collect(Collectors.toSet());
Platform.runLater(() -> tile.removeChartData(new ArrayList<>(dataSet)));
});
tile.getSections().addListener((ListChangeListener<Section>) c -> {
while(c.next()) {
if (c.wasAdded()) {
c.getAddedSubList().forEach(section -> {
Rectangle sectionRect = new Rectangle();
sectionRect.setMouseTransparent(true);
sections.put(section, sectionRect);
});
} else if (c.wasRemoved()) {
c.getRemoved().forEach(section -> sections.remove(section));
}
}
sectionGroup.getChildren().setAll(sections.values());
resize();
});
}
@Override
protected void rendererChanged(final ListChangeListener.Change<? extends Renderer> change) {
while (change.next()) {
// handle added renderer
//TODO: check if this function is still necessary (presently commented)
// for (final Renderer renderer : change.getAddedSubList()) {
// checkRendererForRequiredAxes(renderer);
//}
}
// reset change to allow derived classes to add additional listeners to renderer changes
change.reset();
super.rendererChanged(change);
}
protected R bind(final R other) {
errorStyleProperty().bind(other.errorStyleProperty());
pointReductionProperty().bind(other.pointReductionProperty());
assumeSortedDataProperty().bind(other.assumeSortedDataProperty());
dashSizeProperty().bind(other.dashSizeProperty());
minRequiredReductionSizeProperty().bind(other.minRequiredReductionSizeProperty());
markerSizeProperty().bind(other.markerSizeProperty());
drawMarkerProperty().bind(other.drawMarkerProperty());
polyLineStyleProperty().bind(other.polyLineStyleProperty());
drawChartDataSetsProperty().bind(other.drawChartDataSetsProperty());
drawBarsProperty().bind(other.drawBarsProperty());
drawBubblesProperty().bind(other.drawBubblesProperty());
allowNaNsProperty().bind(other.allowNaNsProperty());
shiftBarProperty().bind(other.shiftBarProperty());
shiftBarOffsetProperty().bind(other.shiftBarOffsetProperty());
dynamicBarWidthProperty().bind(other.dynamicBarWidthProperty());
barWidthPercentageProperty().bind(other.barWidthPercentageProperty());
barWidthProperty().bind(other.barWidthProperty());
getAxes().setAll(other.getAxes());
intensityFadingProperty().bind(other.intensityFadingProperty());
// Bindings.bindContent(axesList(), other.axesList());
other.getAxes().addListener((ListChangeListener<? super Axis>) change -> {
while (change.next()) {
getAxes().addAll(change.getAddedSubList());
getAxes().removeAll(change.getRemoved());
}
});
return getThis();
}
/**
* Notifies all attached {@link InvalidationListener}s and
* {@link ListChangeListener}s about the change.
*
* @param change
* The change to notify listeners about.
*/
public void fireValueChangedEvent(
ListChangeListener.Change<? extends E> change) {
notifyInvalidationListeners();
if (change != null) {
notifyListChangeListeners(change);
}
}