JavaFX撤消列表视图选择

时间:2017-05-27 09:07:40

标签: java listview javafx properties undo

我有一个ListView,当用户更改选择时我会收听selectedItemProperty。

在这个监听器中,我向UndoManager添加了一个事件。当我尝试撤消选择时,selectedItemProperty会触发ChangeListener,它会向UndoManger添加另一个事件并创建一个infinit循环,因为它会在UndoManger撤消时添加一个ListViewSelectionChange。

mapply(function(x, y) lm(y ~ x), colmax, colmean, SIMPLIFY = F)

有人知道如何阻止listview调用监听器吗?

塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

您可以添加一个简单的标志来指示是否应该触发侦听器:

public class DeviceConfigurationController {

    @FXML private ListView<DeviceConfiguration> device_list;
    private boolean pauseListener;

    @FXML
    private void initialize() {
        device_list.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
            if(!pauseListener)
               UndoManager.add(new ListViewSelectionChange<>(oldValue, device_list));
            }            
        });
    }

    @FXML
    private void undo() {
        pauseListener = true;
        UndoManager.undo();
        pauseListener = false;
    }
}