我们何时在ListChangeListener.Change <e>中获得多个更改?

时间:2019-01-29 06:55:16

标签: java javafx

来自JavaFX ListChangeListener.Change API

  

公共抽象布尔值next()

     

转到下一个更改。处于初始状态的Change实例为   无效,需要在调用其他方法之前调用next()。   第一个next()调用将使该对象代表第一个   改变。

因此,如果我们有第一个更改,我们可以有第二个更改,等等。现在,考虑以下代码:

function product_pagination_by_category() {
    if( is_product_category() )
        $limit = 10;

    return $limit;
}
add_filter( 'loop_shop_per_page', 'product_pagination_by_category');

这是输出:

public class NewMain {

    public static void main(String[] args) throws InterruptedException {
        ObservableList<String> list = FXCollections.observableArrayList("Z", "Y", "X");
        list.addListener((ListChangeListener)(event) -> {
            while(event.next()) {
                System.out.println("Added:" +  event.wasAdded());
                System.out.println("Permutated:" +  event.wasPermutated());
                System.out.println("Removed:" +  event.wasRemoved());
                System.out.println("Replaced:" +  event.wasReplaced());
                System.out.println("Updated:" +  event.wasUpdated());
            }
        });
        System.out.println("REPLACING");
        list.set(0, "W");
        System.out.println("\nCLEARING");
        list.clear();
    }
}

如果可以替换的变更很明显-REPLACING Added:true Permutated:false Removed:true Replaced:true Updated:false CLEARING Added:false Permutated:false Removed:true Replaced:false Updated:false ,那么当我们清除时如何解释,无论如何我们都会得到一个变更。请解释一下,当我们在ListChangeListener.Change中获得多个更改时?

1 个答案:

答案 0 :(得分:3)

单个更改可以负责修改一系列值(您可以通过检查type='password'的{​​{1}}和import React from 'react'; import Label from './Common/Label'; const TextInput = (props) => { return( <div> <Label name={props.name} labelText={props.labelText} > </Label> <div> <input type='text' id={props.name} name={props.name} placeholder={props.placeholder} value={props.value} onChange={props.onChange} onBlur={props.onBlur} > </input> </div> {props.isInvalidMsg && <div><span>{props.isInvalidMsg}</span></div>} </div> ); }; export default TextInput; 属性来确定)。通常,from尝试触发最少数量的部分更改,为清楚起见,这是一个具有to值为0且Change等于调用ObservableList之前列表的大小。

触发的确切更改取决于from实现,但是通过to可用的实现在分组修改方面做得很好。此类是所使用的许多clear()实现的超类。

在标准的ObservableList实现中,很少有可以触发单个事件的多部分更改的,但是ObservableListBase可以做到这一点(感谢 @kleopatra提到了这一点):

ObservableList

输出:

ObservableList

任何retainAll实现都可以定义新操作,这些操作可以分组进行多项更改,从而导致对侦听器的单个通知。实现此目的的最简单方法是使用ObservableList<Integer> ol = FXCollections.observableArrayList(); for (int i = 0; i < 10; i++) { ol.add(i); } ol.addListener((ListChangeListener.Change<? extends Integer> event) -> { System.out.println("new change----------------------------------------------"); while(event.next()) { System.out.println("Added:" + event.wasAdded()); System.out.println("Permutated:" + event.wasPermutated()); System.out.println("Removed:" + event.wasRemoved()); System.out.println("Replaced:" + event.wasReplaced()); System.out.println("Updated:" + event.wasUpdated()); } }); ol.retainAll(1, 3, 5, 7, 9); 的{​​{1}}和new change---------------------------------------------- Added:false Permutated:false Removed:true Replaced:false Updated:false Added:false Permutated:false Removed:true Replaced:false Updated:false Added:false Permutated:false Removed:true Replaced:false Updated:false Added:false Permutated:false Removed:true Replaced:false Updated:false Added:false Permutated:false Removed:true Replaced:false Updated:false 方法:

ObservableList

ObservableListBase如果成功将触发2次替换更改。