我不明白为什么这个方法不起作用,因为它三天前就起作用了。每当我尝试使用该方法(按下按钮)时,数据库操作都可以正常工作,但是每当我尝试从实际的表视图中删除时,程序就会抛出一个错误,这样用户就不会再看到该行了。我向initialize方法添加了一个过滤列表,我担心这可能是问题的原因。这是我的密码:
初始化方法:
private void initialize()
{
ObservableList<BloomClient> clients = FXCollections.observableArrayList();
firstNames.setCellValueFactory(new PropertyValueFactory<>("FirstName"));
lastNames.setCellValueFactory(new PropertyValueFactory<>("LastName"));
phoneNumbers.setCellValueFactory(new PropertyValueFactory<>("PhoneNumber"));
birthdays.setCellValueFactory(new PropertyValueFactory<>("Birthday"));
startDates.setCellValueFactory(new PropertyValueFactory<>("StartDate"));
endDates.setCellValueFactory(new PropertyValueFactory<>("ExpireDate"));
try {
clients = dBconnect.getClientList();
} catch (Exception e) {
e.printStackTrace();
}
FilteredList<BloomClient> filteredList = new FilteredList<BloomClient>(clients,b -> true);
filteredSearch.textProperty().addListener(((observable, oldValue, newValue) ->
filteredList.setPredicate(person ->
{
if(newValue == null || newValue.isEmpty())
return true;//nothing in text field
String lowerCaseFilter = newValue.toLowerCase();
if (person.getFirstName().toLowerCase().contains(lowerCaseFilter))
return true;//check first name
else if (person.getLastName().toLowerCase().contains(lowerCaseFilter))
return true;//check last name
else
return false;
})
));
SortedList<BloomClient> sortedList = new SortedList<>(filteredList);
sortedList.comparatorProperty().bind(clientList.comparatorProperty());
clientList.setItems(sortedList);
}
public void freezeAccount() throws SQLException, ParseException {
BloomClient person = clientList.getSelectionModel().getSelectedItem();
dBconnect.sendToFreeze(person);//this works
dBconnect.deleteClient(person);//this works
clientList.getItems().remove(person);//java.lang.UnsupportedOperationException
clientList.refresh();
}
2条答案
按热度按时间cczfrluj1#
在某种程度上理解了,但希望得到更深入的解释。我没有从clientlist(tableview)中删除,而是直接从客户机(observeList)中删除,并使该变量成为全局变量,以便通过其他方法访问。我不确定最初问题背后的原因。
vx6bjr1n2#
嗯,这只是猜测。但有可能
clientList
是一个List<>
使用创建的类型Collections.unmodifiableList()
. 当您尝试修改其中一个时UnsupportedOperationException
被抛出。public static list unmodifiablelist(列表<?扩展(t>列表)
返回指定列表的不可修改视图。此方法允许模块向用户提供对内部列表的“只读”访问。对返回列表的查询操作“读取”到指定的列表,并尝试修改返回的列表(无论是直接修改还是通过其迭代器修改),都会导致unsupportedoperationexception。
请参见:https://docs.oracle.com/javase/8/docs/api/java/util/collections.html#unmodifiablelist-java.util.list-