Имеет ли JavaFX ListView свойство, которое возвращает, какие строки в настоящее время отображаются в области просмотра? Или есть способ присвоить EventHandler определенной строке, которая отправляет событие, когда его позиция в списке изменяется (из-за того, что новые объекты добавляются в список или объекты, удаляемые из списка)?JavaFX ListView: получить позицию строки
В сущности, мне нужно знать координаты x, y выбранной строки, чтобы узнать, выбрана ли выбранная строка из текущей области обзора. Потому что, если это произойдет, мне нужно вызвать метод ListView.scrollTo(), чтобы вернуть фокус в выбранную строку. И эта ситуация может возникнуть, если пользователь выбирает строку, тогда программа добавляет в список больше объектов, которые будут вытеснять любые существующие объекты, в том числе выбранные, из области просмотра.
Я попытался добавить ListChangeListener в наблюдаемый список ниже, но, похоже, я не могу применить его к определенной строке. И этот ListChangeListener, по-видимому, указывает только, была ли строка добавлена / удалена/обновлена / заменена/перестановлена и т. Д. Этот обработчик/слушатель событий, похоже, не дает координаты x, y конкретной строки и не дает некоторую sort boolean указывает, что строка находится в текущей области просмотра объекта ListView.
observableList.addListener(new ListChangeListener<Object>()
{
@override
public void onChanged(ListChangeListener.Change<? extends Object> c)
{
while(c.next())
{
if(c.wasAdded())
{
}
else if(c.wasRemoved())
{
}
.....
}
}
}
Я также вижу, что получение ListViews.getSelectionModel().getSelectedItem().getObject().getLayoutX() or LayoutY()
по какой-то причине всегда возвращает 0,0 при х-у координат.
Единственная вещь, которая, как представляется, дает мне правильные координаты x-y, - это когда я нажимаю на строку и инициируется обратный вызов OnMouseClickEvent (MouseEvent event). Событие возвращает позицию x, y, где его щелкнул. Но, к сожалению, это не дает мне позицию x-y выбранной строки, если ListView динамически добавляет новые объекты в верхнюю часть списка, а позиция выбранной строки изменяется.
Любые идеи были бы весьма признательны.
Нет API для того, что вы ищете. Третья партийная библиотека Томаса Микулы [Беглый] (https: // github.com/TomasMikula/Flowless) предлагает некоторую функциональность, похожую на то, что вы ищете (я думаю). –
Обратите внимание, что в большинстве ваших вопросов вы путаете данные с представлением данных. Например: «Я попытался добавить« ListChangeListener »в« ObservableList »... этот обработчик событий, похоже, не дает координаты x, y конкретной строки». Дело в том, что элементы в вашем списке не имеют координат (* cells * имеют координаты, а не элементы): элемент может даже не иметь никакой соответствующей ячейки или какого-либо интерфейса. См. Документацию ['Cell] (http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Cell.html). Ничто из этого не предотвращает API 'getVisibleRowIndices()'; однако его просто нет –
См. также http://stackoverflow.com/questions/18965871/how-to-get-position-of-an-item-in-listview-in-javafx –