Spec-Zone.ru › OpenJavaFX 11
Модуль javafx.controls
Пакет javafx.scene.control

Класс TreeItem<T>

  • java.lang.Object
    • javafx.scene.control.TreeItem<T>
  • Параметры типа:
    T - Тип свойства value в TreeItem.
    Все реализуемые интерфейсы:
    EventTarget
    Непосредственные подклассы:
    CheckBoxTreeItem
    public class TreeItem<T>
    extends Object
    implements EventTarget
    Модель для отдельного узла, предоставляющего иерархию значений для элемента управления, такого как TreeView. Модель может быть реализована таким образом, что значения могут загружаться в память по мере необходимости.

    Модель позволяет регистрировать слушателей, которые будут уведомляться при изменении количества элементов, их позиции или при изменении самих значений. Однако обратите внимание, что TreeItem не является узлом, и поэтому визуальные события не будут генерироваться на TreeItem. Для получения этих событий необходимо добавить соответствующих наблюдателей к экземплярам TreeCell (через пользовательскую фабрику ячеек — см. документацию класса Cell для получения дополнительной информации).

    В простейшем случае экземпляры TreeItem могут быть созданы в памяти следующим образом:

    
     TreeItem<String> root = new TreeItem<String>("Root Node");
     root.setExpanded(true);
     root.getChildren().addAll(
         new TreeItem<String>("Item 1"),
         new TreeItem<String>("Item 2"),
         new TreeItem<String>("Item 3")
     );
     TreeView<String> treeView = new TreeView<String>(root);
     
    Этот подход хорошо работает для простых древовидных структур или когда данные не слишком велики (так что они могут легко поместиться в памяти). В ситуациях, когда размер древовидной структуры неизвестен (и, следовательно, потенциально огромный), есть возможность создавать экземпляры TreeItem по мере необходимости эффективным способом. Для демонстрации этого кода ниже создаётся файловый обозреватель:
    
      private TreeView buildFileSystemBrowser() {
          TreeItem<File> root = createNode(new File("/"));
          return new TreeView<File>(root);
      }
    
      // This method creates a TreeItem to represent the given File. It does this
      // by overriding the TreeItem.getChildren() and TreeItem.isLeaf() methods
      // anonymously, but this could be better abstracted by creating a
      // 'FileTreeItem' subclass of TreeItem. However, this is left as an exercise
      // for the reader.
      private TreeItem<File> createNode(final File f) {
          return new TreeItem<File>(f) {
              // We cache whether the File is a leaf or not. A File is a leaf if
              // it is not a directory and does not have any files contained within
              // it. We cache this as isLeaf() is called often, and doing the
              // actual check on File is expensive.
              private boolean isLeaf;
    
              // We do the children and leaf testing only once, and then set these
              // booleans to false so that we do not check again during this
              // run. A more complete implementation may need to handle more
              // dynamic file system situations (such as where a folder has files
              // added after the TreeView is shown). Again, this is left as an
              // exercise for the reader.
              private boolean isFirstTimeChildren = true;
              private boolean isFirstTimeLeaf = true;
    
              @Override public ObservableList<TreeItem<File>> getChildren() {
                  if (isFirstTimeChildren) {
                      isFirstTimeChildren = false;
    
                      // First getChildren() call, so we actually go off and
                      // determine the children of the File contained in this TreeItem.
                      super.getChildren().setAll(buildChildren(this));
                  }
                  return super.getChildren();
              }
    
              @Override public boolean isLeaf() {
                  if (isFirstTimeLeaf) {
                      isFirstTimeLeaf = false;
                      File f = (File) getValue();
                      isLeaf = f.isFile();
                  }
    
                  return isLeaf;
              }
    
              private ObservableList<TreeItem<File>> buildChildren(TreeItem<File> TreeItem) {
                  File f = TreeItem.getValue();
                  if (f != null && f.isDirectory()) {
                      File[] files = f.listFiles();
                      if (files != null) {
                          ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
    
                          for (File childFile : files) {
                              children.add(createNode(childFile));
                          }
    
                          return children;
                      }
                  }
    
                  return FXCollections.emptyObservableList();
              }
          };
      }
    События TreeItem

    TreeItem поддерживает ту же концепцию распространения событий, что и в других частях сцены. Это означает, что нет необходимости прослушивать события на всех TreeItem (и это определённо не рекомендуется!). Лучший и гораздо более эффективный способ — подключить слушателей событий к элементу TreeView root. Пока существует путь между местом возникновения события и корневым TreeItem, событие будет распространяться к корневому элементу.

    Важно отметить, что TreeItem не является узлом, что означает, что будут доставляться только типы событий, определённые в TreeItem. Чтобы прослушивать общие события (например, взаимодействия с мышкой), необходимо добавить необходимые слушателей к cells, содержащимся в TreeView (предоставив cell factory).

    Класс TreeItem определяет ряд событий с определённой иерархией. Они показаны ниже (переходите по ссылкам, чтобы узнать больше о каждом типе события):

    • TreeItem.treeNotificationEvent()
      • TreeItem.valueChangedEvent()
      • TreeItem.graphicChangedEvent()
      • TreeItem.expandedItemCountChangeEvent()
        • TreeItem.branchExpandedEvent()
        • TreeItem.branchCollapsedEvent()
        • TreeItem.childrenModificationEvent()

    Отступ выше обозначает отношение между типами событий. Например, все типы событий TreeItem имеют treeNotificationEvent() в качестве родительского типа события, а типы событий ветвления expand / collapse являются treeNotificationEvent(). По соображениям производительности рекомендуется прослушивать только необходимые события. Это означает, что, например, лучше прослушивать TreeItem.valueChangedEvent(), а не TreeItem.treeNotificationEvent().

    С тех пор:
    JavaFX 2.0
    См. также:
    TreeView
  • Краткое описание свойств

    Свойства
    Тип Свойство Описание
    BooleanProperty expanded
    Состояние развернутости этого TreeItem.
    ObjectProperty<Node> graphic
    Узел, который обычно отображается слева от свойства value.
    ReadOnlyBooleanProperty leaf
    Представляет свойство листа TreeItem, которое равно true, если TreeItem не имеет дочерних элементов.
    ReadOnlyObjectProperty<TreeItem<T>> parent
    Свойство, которое представляет родителя этого TreeItem.
    ObjectProperty<T> value
    Свойство, представляющее данные, специфичные для приложения, содержащиеся в этом TreeItem.
  • Краткое описание вложенных классов

    Вложенные классы
    Модификатор и тип Класс Описание
    static class  TreeItem.TreeModificationEvent<T>
    An Event содержащий релевантную информацию обо всех видах изменений TreeItem.
  • Краткое описание конструкторов

    Конструкторы
    Конструктор Описание
    TreeItem()
    Создаёт пустой TreeItem.
    TreeItem​(T value)
    Создаёт TreeItem со свойством value, установленным на указанный объект.
    TreeItem​(T value, Node graphic)
    Создаёт TreeItem со свойством value, установленным на указанный объект, и графикой, установленной на указанный узел.
  • Краткое описание методов

    Все методыСтатические методыМетоды экземпляраКонкретные методы
    Модификатор и тип Метод Описание
    <E extends Event>
    void
    addEventHandler​(EventType<E> eventType, EventHandler<E> eventHandler)
    Регистрирует обработчик событий для этого элемента дерева.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> branchCollapsedEvent()
    Тип события, используемый, когда элемент дерева получает изменение своего свойства развернутости, при этом элемент дерева теперь находится в свёрнутом состоянии.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> branchExpandedEvent()
    Тип события, используемый, когда элемент дерева получает изменение своего свойства развернутости, при этом элемент дерева теперь находится в развернутом состоянии.
    EventDispatchChain buildEventDispatchChain​(EventDispatchChain tail)
    Создает цепочку обработки событий для этой цели.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> childrenModificationEvent()
    Тип события, используемый, когда элемент дерева получает непосредственное изменение своего списка дочерних элементов.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> expandedItemCountChangeEvent()
    Общий тип события, используемый, когда элемент дерева получает изменение, которое приводит к изменению количества видимых дочерних элементов.
    BooleanProperty expandedProperty()
    Состояние развернутости этого элемента дерева.
    ObservableList<TreeItem<T>> getChildren()
    Дочерние элементы этого элемента дерева.
    Node getGraphic()
    Возвращает узел, который обычно отображается слева от свойства значения.
    TreeItem<T> getParent()
    Родитель этого элемента дерева.
    T getValue()
    Возвращает данные, специфичные для приложения, представленные этим элементом дерева.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> graphicChangedEvent()
    Тип события, используемый, когда элемент дерева получает изменение своего свойства графики.
    ObjectProperty<Node> graphicProperty()
    Узел, который обычно отображается слева от свойства значения.
    boolean isExpanded()
    Возвращает состояние развернутости этого элемента дерева.
    boolean isLeaf()
    Элемент дерева является листом, если у него нет дочерних элементов.
    ReadOnlyBooleanProperty leafProperty()
    Представляет свойство элемента дерева-листа, которое равно true, если у элемента дерева нет дочерних элементов.
    TreeItem<T> nextSibling()
    Возвращает следующего брата элемента дерева.
    TreeItem<T> nextSibling​(TreeItem<T> afterNode)
    Возвращает следующего брата после заданного узла.
    ReadOnlyObjectProperty<TreeItem<T>> parentProperty()
    Свойство, представляющее родителя этого элемента дерева.
    TreeItem<T> previousSibling()
    Возвращает предыдущего брата элемента дерева.
    TreeItem<T> previousSibling​(TreeItem<T> beforeNode)
    Возвращает предыдущего брата после заданного узла.
    <E extends Event>
    void
    removeEventHandler​(EventType<E> eventType, EventHandler<E> eventHandler)
    Отменяет ранее зарегистрированный обработчик событий для этого элемента дерева.
    void setExpanded​(boolean value)
    Устанавливает состояние развернутости этого элемента дерева.
    void setGraphic​(Node value)
    Устанавливает узел, который обычно отображается слева от свойства значения.
    void setValue​(T value)
    Устанавливает данные, специфичные для приложения, представленные этим элементом дерева.
    String toString()
    Возвращает строковое представление этого объекта TreeItem.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> treeNotificationEvent()
    Основной тип события, используемый для указания того, что событие произошло внутри элемента дерева.
    static <T> EventType<TreeItem.TreeModificationEvent<T>> valueChangedEvent()
    Тип события, используемый, когда элемент дерева получает изменение своего свойства значения.
    ObjectProperty<T> valueProperty()
    Свойство, представляющее данные, специфичные для приложения, содержащиеся в этом элементе дерева.
    • Методы, унаследованные от класса java.lang.Object

      clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Подробное описание свойств

    • value

      public final ObjectProperty<T> valueProperty
      Свойство, представляющее данные, специфичные для приложения, содержащиеся в этом элементе дерева.
      Возвращает:
      свойство, представляющее данные, специфичные для приложения, содержащиеся в этом элементе дерева
    • graphic

      public final ObjectProperty<Node> graphicProperty
      Узел, обычно отображаемый слева от свойства value. Для лучшего эффекта, это обычно изображение размером 16x16.
      См. также:
      getGraphic(), setGraphic(Node)
    • expanded

      public final BooleanProperty expandedProperty
      Состояние раскрытия этого элемента дерева.
      См. также:
      isExpanded(), setExpanded(boolean)
    • leaf

      public final ReadOnlyBooleanProperty leafProperty
      Представляет свойство листа элемента дерева, равное true, если у элемента дерева нет дочерних элементов.
      См. также:
      isLeaf()
    • parent

      public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty
      Свойство, представляющее родительский элемент этого элемента дерева.
      См. также:
      getParent()
  • Подробное описание конструкторов

    • TreeItem

      public TreeItem()
      Создаёт пустой элемент дерева.
    • TreeItem

      public TreeItem​(T value)
      Создаёт элемент дерева со свойством value, установленным в предоставленный объект.
      Параметры:
      value - Объект, который будет сохранён как значение этого элемента дерева.
    • TreeItem

      public TreeItem​(T value,
                      Node graphic)
      Создаёт элемент дерева со свойством value, установленным в предоставленный объект, и свойством graphic, установленным в предоставленный узел.
      Параметры:
      value - Объект, который будет сохранён как значение этого элемента дерева.
      graphic - Узел, который будет показан в TreeView рядом с этим элементом дерева.
  • Подробное описание методов

    • treeNotificationEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> treeNotificationEvent()
      Основной тип события EventType, используемый для указания того, что событие произошло внутри элемента TreeItem. Когда событие происходит в TreeItem, оно срабатывает для всех слушателей в этом TreeItem, прежде чем «подняться» по цепочке родительских TreeItem, следуя свойству parent. Это повторяется до тех пор, пока не будет достигнут TreeItem, у которого родительский TreeItem равен null. В этот момент событие перестает «подниматься» и больше не распространяется. Это означает, что события, происходящие в TreeItem, могут быть относительно недорогими, так как слушателю нужно установить прослушивание только на корневой узел TreeView, чтобы получать уведомления о событиях, происходящих в любой точке дерева.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      основной тип события EventType, когда событие произошло внутри TreeItem
    • expandedItemCountChangeEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> expandedItemCountChangeEvent()
      Общий тип события EventType, используемый, когда TreeItem получает изменение, в результате которого изменяется количество видимых дочерних элементов. Обычно это достигается с помощью одного из подтипов этого типа события (см. branchExpandedEvent(), branchCollapsedEvent() и childrenModificationEvent() для трёх подтипов).
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Общий тип события EventType, когда TreeItem получает изменение
      С:
      JavaFX 8.0
    • branchExpandedEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchExpandedEvent()
      Тип события EventType, используемый, когда TreeItem получает изменение свойства expanded, так что TreeItem теперь находится в расширенном состоянии.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Тип события EventType, используемый, когда TreeItem получает изменение
    • branchCollapsedEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> branchCollapsedEvent()
      Тип события EventType, используемый, когда TreeItem получает изменение свойства expanded, так что TreeItem теперь находится в свёрнутом состоянии.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Тип события, когда TreeItem получает изменение
    • childrenModificationEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> childrenModificationEvent()
      Тип события EventType, используемый, когда TreeItem получает прямое изменение списка своих дочерних элементов.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Тип события, когда TreeItem получает прямое изменение списка дочерних элементов
    • valueChangedEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> valueChangedEvent()
      Тип события EventType, используемый, когда TreeItem получает изменение свойства value.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Тип события, когда TreeItem получает изменение свойства value
    • graphicChangedEvent

      public static <T> EventType<TreeItem.TreeModificationEvent<T>> graphicChangedEvent()
      Тип события EventType, используемый, когда TreeItem получает изменение свойства graphic.
      Параметры типа:
      T - Тип значения, содержащегося в TreeItem.
      Возвращает:
      Тип события, когда TreeItem получает изменение свойства graphic
    • setValue

      public final void setValue​(T value)
      Устанавливает данные, специфичные для приложения, представленные этим TreeItem.
      Параметры:
      value - данные, специфичные для приложения
    • getValue

      public final T getValue()
      Возвращает данные, специфичные для приложения, представленные этим TreeItem.
      Возвращает:
      данные, представленные этим TreeItem
    • valueProperty

      public final ObjectProperty<T> valueProperty()
      Свойство, представляющее данные, специфичные для приложения, содержащиеся в этом TreeItem.
      Возвращает:
      свойство, представляющее данные, специфичные для приложения, содержащиеся в этом TreeItem
    • setGraphic

      public final void setGraphic​(Node value)
      Устанавливает узел, который обычно отображается слева от свойства value. Для лучшего эффекта, это обычно изображение размером 16x16.
      Параметры:
      value - узел графики, который будет отображен пользователю.
    • getGraphic

      public final Node getGraphic()
      Возвращает узел, который обычно отображается слева от свойства value. Для лучшего эффекта, это обычно изображение размером 16x16.
      Возвращает:
      Узел графики, который будет отображен пользователю.
    • graphicProperty

      public final ObjectProperty<Node> graphicProperty()
      Узел, который обычно отображается слева от свойства value. Для лучшего эффекта, это обычно изображение размером 16x16.
      См. также:
      getGraphic(), setGraphic(Node)
    • setExpanded

      public final void setExpanded​(boolean value)
      Устанавливает состояние расширения для этого TreeItem. Это не имеет эффекта на TreeItem без дочерних элементов. Однако, для TreeItem с дочерними элементами, результат переключения этого свойства заключается в том, что визуально дочерние элементы либо станут видимыми, либо скрытыми, в зависимости от того, установлено ли expanded в true или false.
      Параметры:
      value - Если у этого TreeItem есть дочерние элементы, вызов setExpanded с true приведет к тому, что дочерние элементы станут видимыми. Вызов setExpanded с false скроет все дочерние элементы, принадлежащие TreeItem.
    • isExpanded

      public final boolean isExpanded()
      Возвращает состояние расширения этого TreeItem.
      Возвращает:
      Возвращает состояние расширения этого TreeItem.
    • expandedProperty

      public final BooleanProperty expandedProperty()
      Состояние расширения этого TreeItem.
      См. также:
      isExpanded(), setExpanded(boolean)
    • isLeaf

      public boolean isLeaf()
      TreeItem является листом, если у него нет дочерних элементов. Метод isLeaf может быть переопределён подклассами, чтобы поддержать альтернативные способы определения того, является ли TreeItem листом, но общая концепция остаётся той же: лист не может быть расширен пользователем и, следовательно, не будет отображать узел раскрытия или реагировать на запросы расширения.
      Возвращает:
      true, если у этого TreeItem нет дочерних элементов
    • leafProperty

      public final ReadOnlyBooleanProperty leafProperty()
      Представляет свойство листа TreeItem, которое равно true, если у TreeItem нет дочерних элементов.
      См. также:
      isLeaf()
    • getParent

      public final TreeItem<T> getParent()
      Родительский элемент TreeItem. Каждый TreeItem может иметь не более одного родителя. Если у TreeItem нет родителя, он представляет корень в модели дерева.
      Возвращает:
      Родитель этого TreeItem, или null, если у TreeItem нет родителя.
    • parentProperty

      public final ReadOnlyObjectProperty<TreeItem<T>> parentProperty()
      Свойство, представляющее родителя этого TreeItem.
      См. также:
      getParent()
    • getChildren

      public ObservableList<TreeItem<T>> getChildren()
      Дочерние элементы этого TreeItem. Этот метод вызывается часто, поэтому рекомендуется кешировать возвращаемый список в любом реализации TreeItem.
      Возвращает:
      список, содержащий дочерние TreeItem, принадлежащие TreeItem.
    • previousSibling

      public TreeItem<T> previousSibling()
      Возвращает предыдущего брата TreeItem. Порядок основан на положении TreeItem относительно его братьев в списке дочерних элементов, принадлежащих родителю TreeItem.
      Возвращает:
      TreeItem, являющийся предыдущим братом текущего TreeItem, или null, если такой брат не найден.
    • previousSibling

      public TreeItem<T> previousSibling​(TreeItem<T> beforeNode)
      Возвращает предыдущего брата после заданного узла. Порядок основан на положении заданного TreeItem относительно его братьев в списке дочерних элементов, принадлежащих родителю TreeItem.
      Параметры:
      beforeNode - TreeItem, для которого ищется предыдущий брат.
      Возвращает:
      TreeItem, являющийся предыдущим братом заданного TreeItem, или null, если такой брат не найден.
    • nextSibling

      public TreeItem<T> nextSibling()
      Возвращает следующего брата элемента TreeItem. Порядок определяется положением TreeItem относительно его братьев в списке детей, принадлежащем родителю TreeItem.
      Возвращает:
      Элемент TreeItem, являющийся следующим братом текущего TreeItem, или null, если такой брат не найден.
    • nextSibling

      public TreeItem<T> nextSibling​(TreeItem<T> afterNode)
      Возвращает следующего брата указанного узла. Порядок определяется положением указанного TreeItem относительно его братьев в списке детей, принадлежащем родителю TreeItem.
      Параметры:
      afterNode - TreeItem, для которого ищется следующий брат.
      Возвращает:
      Элемент TreeItem, являющийся следующим братом указанного TreeItem, или null, если такой брат не найден.
    • toString

      public String toString()
      Возвращает строковое представление этого объекта TreeItem.
      Переопределяет:
      toString в классе Object
      Возвращает:
      строковое представление этого объекта TreeItem.
    • buildEventDispatchChain

      public EventDispatchChain buildEventDispatchChain​(EventDispatchChain tail)
      Создаёт цепочку обработки событий для данного целевого объекта. Цепочка обработки событий содержит диспетчеры событий, которые могут быть заинтересованы в обработке событий, направленных на этот объект EventTarget. Этот целевой объект не добавляется автоматически в цепочку, поэтому, если он хочет обрабатывать события, ему необходимо добавить в цепочку собственного EventDispatcher.

      В случае, если целевой объект является частью иерархии, цепочка для него обычно строится из диспетчеров событий, собранных от корня иерархии до целевого объекта.

      Цепочка обработки событий строится путём модификации предоставленной начальной цепочки обработки событий. Возвращаемая цепочка должна содержать начальную цепочку в конце, поэтому диспетчеры должны быть добавлены в начало начальной цепочки.

      Вызывающий метод не должен полагаться на то, что исходная цепочка останется неизменной, или что возвращаемое значение будет ссылаться на другую цепочку.

      Определено в:
      buildEventDispatchChain в интерфейсе EventTarget
      Параметры:
      tail - начальная цепочка для построения
      Возвращает:
      результирующая цепочка обработки событий для этого целевого объекта
    • addEventHandler

      public <E extends Event> void addEventHandler​(EventType<E> eventType,
                                                    EventHandler<E> eventHandler)
      Регистрирует обработчик событий в этом элементе TreeItem. Класс TreeItem позволяет регистрировать слушателей, которые будут уведомляться при изменении количества элементов, их положения или если сами значения изменятся. Однако обратите внимание, что TreeItem не является узлом, и поэтому визуальные события не будут генерироваться для TreeItem. Для получения этих событий необходимо добавить соответствующих наблюдателей к экземплярам TreeCell (через пользовательский фабричный метод ячейки - см. документацию класса Cell для получения более подробной информации).
      Типы параметров:
      E - Событие
      Параметры:
      eventType - тип событий, которые должен получать обработчик
      eventHandler - регистрируемый обработчик
      Исключения:
      NullPointerException - если тип события или обработчик равен null
    • removeEventHandler

      public <E extends Event> void removeEventHandler​(EventType<E> eventType,
                                                       EventHandler<E> eventHandler)
      Отменяет регистрацию ранее зарегистрированного обработчика событий из этого элемента TreeItem. Один обработчик может быть зарегистрирован для разных типов событий, поэтому вызывающий метод должен указать конкретный тип события, из которого необходимо удалить обработчик.
      Типы параметров:
      E - Событие
      Параметры:
      eventType - тип события, из которого необходимо удалить обработчик
      eventHandler - удаляемый обработчик
      Исключения:
      NullPointerException - если тип события или обработчик равен null

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API