класс javafx.scene.Node имеет пару методов setUserData (Object) и Object getUserData ()
, которые вы могли бы использовать для добавления вашей информации в узел.
So , вы можете вызвать page.setUserData (info);
И контроллер может проверить, задана ли информация. Кроме того, вы можете использовать ObjectProperty для пересылки данных назад, если это необходимо.
Соблюдайте документацию здесь: http://docs.oracle.com/javafx/2/api/javafx/fxml /doc-files/introduction_to_fxml.html Перед фразой «В первой версии handleButtonAction () помечен с помощью @FXML, чтобы разрешить разметку, определенную в документе контроллера, вызвать ее. Во втором примере поле кнопки аннотируется, чтобы позволить загрузчику устанавливать его значение. Метод initialize () аналогично аннотируется. "
Итак, вам нужно связать контроллер с узлом и установить пользовательские данные для узла.
Попробуйте
new Date(Long.MAX_VALUE)
, который даст вам максимально возможное значение даты в Java.
От Java SE 8 Вы могли использовать:
LocalDate.MAX
Инкапсулируйте желаемую функциональность в своем собственном классе, использование Long.MAX_VALUE, скорее всего, вызовет у вас проблемы.
class ExpirationDate {
Date expires;
boolean hasExpiration() {
return expires == null;
}
Date getExpirationDate() {
return expires;
}
boolean hasExpired(Date date) {
if (expires == null) {
return true;
} else {
return date.before(expires);
}
}
...
}
+1 к предложениям Long.MAX_VALUE. Похоже, это поможет вам, если вы отсортируете данные по полю даты.
Однако вместо построения даты из какого-то большого постоянного значения, когда вам нужна дата, используйте глобально видимый синглтон для хранения экземпляра Date, который представляет ваше особое значение:
class DateUtil
{
public static final Date NO_EXPIRE = new Date( Long.MAX_VALUE );
}
Затем вы можете использовать простое сравнение идентичности (mydate == DateUtils.NO_EXPIRE), чтобы проверить, относится ли конкретная дата к вашему особому случаю вместо obj.equals (); (например, mydate.equals (DateUtils.NO_EXPIRE);)
Вот что я делаю:
public static final TimeZone UTC;
// 0001.01.01 12:00:00 AM +0000
public static final Date BEGINNING_OF_TIME;
// new Date(Long.MAX_VALUE) in UTC time zone
public static final Date END_OF_TIME;
static
{
UTC = TimeZone.getTimeZone("UTC");
final Calendar c = new GregorianCalendar(UTC);
c.set(1, 0, 1, 0, 0, 0);
c.set(Calendar.MILLISECOND, 0);
BEGINNING_OF_TIME = c.getTime();
c.setTime(new Date(Long.MAX_VALUE));
END_OF_TIME = c.getTime();
}
Обратите внимание, что если часовой пояс НЕ является UTC, вы получите смещения от "конца времени", которые не будут максимальными значениями. Они особенно полезны для вставки в поля базы данных, когда даты не должны быть NULL.
рассматривали ли вы возможность использования Joda Time ?
Планируется, что он будет включен в java 7 в качестве основы для JSR-310
Функция, которая может вас заинтересовать, - это ZeroIsMaxDateTimeField который в основном меняет нулевые поля на максимальное значение для этого поля в пределах даты и времени.