Я столкнулся с ситуацией, когда есть два текстовых поля с двумя отдельными слушателями для каждого из них.Текстовые поля и слушатели javaFX
TextField customerId и TextField имя_пользователя.
1000 мохан
1002 Митхун
Я пытаюсь автоматически обновлять другие текстовое поле, когда один текстовое поле заполняется, например, если CUSTOMERID 1000 заполнена, то соответствующее имя клиента Mohan обновляется в текст field customerName, и если mohan будет заполнен, то его идентификатор клиента 1000 будет заполнен текстовым полем customerId. Я использую карты. Проблема заключается в том, что одно текстовое поле заполняет его слушатель, который вызывает обратный вызов одного и того же прослушивателя текстового поля, и это вызывает циклы наконец, заканчивается с ошибкой. Что я должен делать, чтобы это?
Пример минимального
Map<String, String> treeMapCustomerName,treeMapCustomerId;
treeMapCustomerName=new TreeMap<String,String>();
treeMapCustomerId=new TreeMap<String,String>();
String customerName="mohan";
String customerId="1000";
treeMapCustomerId.put("1000","Mohan");
treeMapCustomerId.put("1002","Mithun");
treeMapCustomerName.put("Mohan","1000");
treeMapCustomerName.put("Mithun","1002");
customerName.textProperty().addListener((observable, oldValue, newValue) -> {
customerId.setText(treeMapCustomerName.get(customerName));//immediately customerId textfield listener is triggered which will trigger this listener causing cycles
});
customerId.textProperty().addListener((observable, oldValue, newValue) -> {
customerName.setText(treeMapCustomerId.get(customerId));
});
Конечно, только ошибки вы могут получить здесь исключения с нулевым указателем, потому что вызовы, которые вы должны использовать для 'treeMapCustomerName.get (...)' и 'treeMapCustomerId.get (...)' должны возвращать 'null' (вы передаете текстовые поля в' get ', и вы никогда - не можете - сопоставляете любые значения на карте с текстовыми полями, поэтому' get() 'вызывает return' null'). –
Да, вы правы, теперь исправлено –
и как я могу удалить избыточный код. –