Nano Hash - криптовалюты, майнинг, программирование

Создание TreeModel

У меня есть несколько вопросов относительно древовидной модели в Java.

Последние 13 недель занятий мы разрабатывали менеджера контактов. Этот менеджер контактов имеет различные компоненты: контакт может быть деловым или личным контактом, и у каждого есть свой набор событий. У них также есть адреса, социальные сети и номера телефонов.

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

Например, корень, родитель, дети, узлы — все это слова, которые я пытаюсь определить, но с трудом. В этом случае мой корень будет моим менеджером контактов, мой родитель - контактом, а дети - адресом и прочим? Если бы кто-то мог помочь мне понять это, это действительно помогло бы.

Вот выдержка из задания, если это поможет вам лучше понять мой вопрос:

  • Создайте класс ContactManagerFrame, расширяющий JFrame. Его конструктор примет в качестве аргумента объект ContactManager (полученный из сериализованного файла, сохраненного на диске).

  • Создайте и разместите необходимые графические компоненты. (Совет: используйте JPanel для группировки компонентов функции фильтрации, добавьте JTree в JScrollPane, используйте BorderLayout при добавлении компонентов)

  • Создайте метод createNodes(), который принимает в качестве аргументов DefaultMutableTreeNode, соответствующий корню дерева (то есть узлу «Контакты»), и строку, соответствующую фильтру, указанному пользователем. Этот метод должен создавать узлы для контактов и объектов, на которые ссылается каждый контакт, и организовывать их в древовидную структуру, как показано на рисунке 1. Следует избегать создания пустых родительских узлов (например, если контакт не имеет адресов, вы не должны добавлять родительский узел «Адреса» для этого конкретного контакта). Если указанный фильтр является пустой строкой, createNodes() будет включать все контакты, хранящиеся в объекте ContactManager. В любом другом случае createNodes() будет включать контакты, возвращенные методом searchContacts() в ContactManager.

  • Создайте объект DefaultTreeModel из корневого узла. Используйте DefaultTreeModel для инициализации компонента JTree».

Я не прошу никого из вас решить это для меня или что-то в этом роде. Я просто очень хочу это понять. Большое тебе спасибо!

27.11.2013

  • Вам нужно попросить преподавателя объяснить детали вашего задания. Здесь не публикуется. 27.11.2013
  • Древовидная структура, вероятно, показана на рис. 1. Посмотрите ее. 27.11.2013
  • Это не обязательно то, как это выглядит или что-то еще, что я не могу понять, это вся концепция древовидных моделей, которую я не могу понять. 28.11.2013
  • docs.oracle.com/javase/tutorial/uiswing/components/tree. html 28.11.2013
  • Это именно то, на что я смотрел, и я просто не могу этого понять .. Спасибо, очень любезно, что даже нашли время в течение дня, чтобы помочь ребятам, очень признательны. 28.11.2013

Ответы:


1

Более сложные компоненты Swing, такие как JTree, JTable, JList или JComboBox работают с концепцией модели. Это означает: подчиненные данные, которые отображаются компонентом. Они спроектированы таким образом, чтобы отделить сами данные от их «визуального» представления (также известного как представление) и позволить разработчику «забыть» (более или менее) о представление данных. Как объясняется в руководствах, если вам нужно добавить новые данные объект для отображения на одном из этих компонентов, вам нужно только добавить его в модель, и представление будет быть автоматически обновлены.

Сказав это, вы увидите, что у этих компонентов есть конструктор, который принимает модель в качестве аргумента:

Эти модели определяются интерфейсами, которые устанавливают базовый контракт, которому должна соответствовать любая конкретная реализация.

В частности, в случае JTree у нас есть TreeModel и реализация по умолчанию: DefaultTreeModel< /а>. Кроме того, любой TreeModel должен работать с объектами узла, которые должны реализовать TreeNode.

Таким образом, для работы с JTree вам понадобится TreeModel и несколько TreeNodes, связанных отношениями родитель-потомок. Например что-то вроде этого:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Contacts"); // root node

DefaultMutableTreeNode contact1 = new DefaultMutableTreeNode("Contact # 1"); // level 1 node
DefaultMutableTreeNode nickName1 = new DefaultMutableTreeNode("drocktapiff"); // level 2 (leaf) node
contact1.add(nickName1); 

DefaultMutableTreeNode contact2 = new DefaultMutableTreeNode("Contact # 2");
DefaultMutableTreeNode nickName2 = new DefaultMutableTreeNode("dic19");        
contact2.add(nickName2);

root.add(contact1);
root.add(contact2);

DefaultTreeModel model = new DefaultTreeModel(root);
JTree tree = new JTree(model);

Рисунок

введите здесь описание изображения

27.11.2013
  • Вау, это точно идеальное объяснение, большое спасибо, чувак! Если бы ты жил где-то здесь, я бы купил тебе пива, ты спасаешь жизнь. Серьезно, последние три часа я пытался точно понять то, что вы объяснили, менее чем в 300 словах. Серьезное спасибо. 28.11.2013
  • Сделанный! Все еще есть много перегибов, которые нужно решить с моей программой, но это поможет в тяжелой битве, ха-ха, большое спасибо, чувак! 28.11.2013
  • Ха-ха, я рад это слышать! Удачи и не стесняйтесь задавать новый вопрос, если вы застряли. @drocktapiff 28.11.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..