Настройка диапазона просто означает, что отключение даты вне этого диапазона. Таким образом, процесс такой же, как и в связанном ответе . Вы можете создать служебный метод для создания фильтров проще. Например, configureShowRangeHandler
допускает Predicate
, который отключит дату, если предикат вернет false. enableUntilToday
- простой пример ограничения выбираемых дат до сегодняшнего дня.
{
DatePicker dp = new DatePicker();
Predicate enableUntilTodayDates = d -> !d.after(new Date());
configureShowRangeHandler(dp, enableUntilTodayDates);
}
static HandlerRegistration configureShowRangeHandler(DatePicker dp, Predicate fn) {
return dp.addShowRangeHandler(ev -> {
for (Date t = copyDate(ev.getStart()); t.before(ev.getEnd()); addDaysToDate(t, 1)) {
dp.setTransientEnabledOnDates(fn.test(t), t);
}
});
}
copyDate
и addDaysToDate
статически импортированы из CalendarUtil
Возможно, вы могли бы использовать poly2mask
для вычисления интересующей области вместо того, чтобы наносить ее с помощью патча, как в вашем скрипте. Например,
Polygon = [ 15 45 33 30 40 23 ; 9 9 24 15 13 13]';
ImageWidth = 100;
ImageHeight = 50;
bw = poly2mask(Polygon(:,1),Polygon(:,2),ImageHeight,ImageWidth);
imshow(bw)
И результатом bw приведенного выше кода является это изображение.