Лучший дизайн свинга? - PullRequest
       2

Лучший дизайн свинга?

3 голосов
/ 19 июля 2011

Я работаю над проектом для онлайн-класса. Я сделал ошибку, взяв этим летом, и мне нужно создать графический интерфейс, чтобы показать, как работает алгоритм кода Хаффмана. Часть алгоритма проста, не очень сложна. Однако я не уверен, что лучший способ нарисовать дерево (Форрест) на каждом шаге. Он должен был бы начинаться как n узлов (с символами в них) на экране, а затем вы нажимаете кнопку «Далее», и он выбирает два символа с наименьшим весом узлов (на основе частоты символов) и делает их потомками новый узел (только с весом - без символа), а затем обновите экран / панель.

Я делал свинг-графический интерфейс раньше, мои навыки не являются чем-то особенным, но я знаю свой путь. Однако я застрял на этой реализации. У меня есть пара сотен строк кода, написанных прямо сейчас, но это не работает, и я все равно думаю, что это плохо, поэтому я хочу «начать все сначала» и лучше спланировать. Поэтому я хотел бы дать вам совет относительно структуры данных, чтобы отслеживать узлы и как рисовать их на экране.

Я использовал ArrayList из JPanels в качестве узлов и пытался нарисовать их в нулевой макет. Я уверен, что это ужасно, и я хотел бы узнать лучший способ. Возможно GridBagLayout?

ПРИМЕЧАНИЕ: не говорите JTree.

Ответы [ 4 ]

2 голосов
/ 19 июля 2011

Хороший вариант - просто использовать библиотеку для рисования деревьев / графиков.В прошлом у меня был хороший успех с Visual Library .

Другая возможность Prefuse

1 голос
/ 19 июля 2011

Используйте изображение дерева (только один экземпляр) и массива или другой структуры данных, чтобы содержать «данные», которые использует алгоритм. Подумайте, как вы можете использовать данные, чтобы определить, где должно быть нарисовано изображение. Используйте repaint () после запуска алгоритма.

[Далее] -> Алгоритм запускается -> Обновить с помощью repaint ();

Таким образом, у вас есть один кадр, одна панель и один объект BufferedImage. Трюк придет, когда вам нужно будет немного математически понять, по каким координатам должен быть нарисован узел.

Расположение ваших компонентов не имеет значения, поскольку вы не добавляете какие-либо компоненты в контейнер, а просто рисуете данные изображения на нем.

1 голос
/ 19 июля 2011

Вместо того, чтобы бороться с различными макетами Swing, вы можете просто сделать собственный 2D-рисунок. См. введите описание ссылки здесь пример того, как начать.

0 голосов
/ 18 января 2012

У всех нас было то, что у вас есть; -)

Прежде всего, никогда не используйте макет Null, потому что тогда размеры статичны, и ваше приложение не будет работать с другими разрешениями, как хотелось бы.1004 * Лучший макет для использования: GridBagLayout!

Почему?очень гибкая, и вы можете получить все компоненты именно на том месте, где вы хотите, без учета разрешения.Его сложнее настроить, но в итоге получится лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...