2014-11-29 2 views
0

Я прошел много учебников, которые рассказывают о макетах в Java Swing, но они, похоже, не достаточны для моей потребности. Я создаю графический интерфейс солнечной системы с помощью Java Swing, и я хочу разместить планеты в графическом интерфейсе в соответствии со значениями, которые я извлекаю из своего микроконтроллера, которые обычно являются значениями точки плавающей точки. Я не могу использовать компоновку сетчатых мешков, поскольку для размещения метки я должен указать сетку x и сетку y, что не может быть так, поскольку я получаю значения точки плавания с микроконтроллера. Лучший ресурс, который я нашел, - использовать абсолютную компоновку, где я могу указать положение планеты, предоставив простые координаты X и Y, которые будут извлечены из микроконтроллера. Проблема, с которой я столкнулся сейчас, заключается в том, что в абсолютном макете нет функции автоматического изменения размера.Позиционирование ярлыка в Java Swing

Что было бы самым лучшим вариантом для использования функции автоматического изменения размера в абсолютной компоновке?

+0

Один из подходов - это написать собственный менеджер компоновки, который принимает координаты в качестве ограничений. А затем использует те, которые были правильно масштабированы при укладке объектов на экран. – kiheru

ответ

3

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

Но вы хотите разместить вещи в соответствии с вашими расчетами. Я рекомендую сделать это на панели, вычисляя размер и положение ваших объектов в соответствии с размером панели в точке рисования. Когда панель изменяет размер, вам нужно поймать событие, которое говорит, что оно изменяет размер и перерисовывает. Вам нужно будет иметь дело с вашими минимумами и максимумами и т. Д.

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

Удачи.

+0

О, да. Если объекты не имеют каких-либо функциональных возможностей, менеджер компоновки переполнен. Я просто предположил, что они были бы, но это могло быть необоснованным. – kiheru

+0

Я уже сделал аналогичную рекомендацию в оригинальном постере [аналогичный предыдущий вопрос] (http://stackoverflow.com/questions/27158992/positioning-a-label-using-swing-in-java), но оригинальный плакат просто полностью игнорировал мои рекомендации, никаких комментариев или чего-либо еще, поэтому вы можете тратить свое время на его ответ. –

+0

'Я не рекомендую, чтобы пользовательский менеджер компоновки предлагался в другом месте. Пользовательский макет всегда является хорошим предложением. 'вам все равно придется писать код, который определяет позиции вещей' - точно! Если вам все равно нужно написать собственный код, тогда поместите код в менеджер компоновки, где у вас есть четко определенный интерфейс для реализации макета. Вам не нужно беспокоиться о том, чтобы добавить слушателей к панели, чтобы вызвать макет при изменении размера панели. Это делается автоматически. Не пытайтесь изобретать колесо, произвольно помещая код макета в свой класс. – camickr

Смежные вопросы