Как обернуть компонент в несколько строк - PullRequest
0 голосов
/ 06 августа 2010

У меня большой компонент (скажем, ширина = 4000 пикселей, высота = 200 пикселей), и я хотел бы видеть его полностью даже на маленьком экране.Я не вижу простого способа сделать компонент обтекания, моя идея заключается в следующем: учитывая фактор (например, 4), компонент будет иметь размер 1000x800, поместив дочерний элемент в 4 строки.Запросы на размер будут преобразованы в обратном порядке, чтобы изменить ребенка, и так далее.При рисовании компонент вызывал бы paint (Graphics) дочернего элемента 4 раза с правильным аргументом Graphics, который отображал бы перенесенное пространство на дочернее пространство.
Однако я не вижу, как обрабатывать все события:я должен установить eventlisteners для каждого сгенерированного детьми события (PropertyChange) и для каждого сгенерированного родителями события (Mouse, Key, Resize, ....)?Это выглядит довольно много картирования, и я был бы рад услышать более простой способ сделать это ...
Я не слишком много смотрел на реализацию JViewport, но, возможно, это могло бы помочь мне невы думаете?

спасибо за ваши предложения!

Фредерик.

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

Я являюсь разработчиком компонентапод вопросом (и имел острые слова с собой, как и предполагалось, но это ни к чему меня не привело :-)).Я на самом деле добавил «код переноса строк», но оказалось (очень быстро!), Что добавление преобразования пространства точек, управление рисованием в кодах самого компонента делает его действительно очень грязным, и именно поэтому я полагаю, чтоКомпонент действительно лучшее решение.Кроме того, создание пользовательского компонента позволяет мне намного проще использовать его в качестве «обертки» для любого другого компонента.Представьте себе, что вам приходилось воссоздавать функциональность, подобную JScollPane, каждый раз, когда вы используете JScollPane, имея дело с положением прокрутки, буферизованным рисованием и всем, что находится внутри ваших собственных компонентов: надеюсь, вам не нужно!

Ответы [ 2 ]

1 голос
/ 06 августа 2010

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

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

В ответ на комментарий: перенос гистограммы в смысле вставки произвольных разрывов строк вряд ли будет полезен. С графическими компонентами «прерыватель» не будет точно знать, куда вставить разрывы; Вы также потеряете любую информацию, прикрепленную к оси Y. Гораздо лучшим решением было бы просто уменьшить гистограмму в горизонтальном направлении до тех пор, пока она не уместится на ширину экрана, или нарисовать четыре гистограммы одна под другой, дублируя информацию по оси Y для каждой. В качестве альтернативы разрешите горизонтальную прокрутку по всей гистограмме; или измените оси так, чтобы гистограмма была нарисована горизонтально. Если ничего из вышеперечисленного не работает, возможно, из-за того, что у вас много сотен гистограмм, возможно, более интерактивный подход, при котором вы объединяете некоторые из гистограмм вместе, чтобы дать обзор, и позволить пользователю «углубиться» в график, чтобы на более подробную информацию.

Если проблема заключается в том, что вы не можете изменить исходный компонент, и он рисует изображение фиксированного размера, тогда вам лучше всего четыре раза вызвать на нем 'paint (Graphics)' с соответствующими преобразованиями и clipRects на Графика для рисования четырех частей «сложены». Но, честно говоря, вы можете отказаться от оригинального компонента. Гистограммы не так сложно нарисовать, и есть множество бесплатных пакетов для черчения, которые помогут вам. И будь очень груб с разработчиком оригинального компонента, если встретишь их.

0 голосов
/ 09 августа 2010

Вы не упоминаете прокрутку. Поместите его на собственную панель, а затем поместите эту панель на панель прокрутки

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