Что такое offsets.length или spans.length в методе layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)?

Вот небольшое исследование, которое я провел, и ответ ниже дал мне @StanislavL.

Ознакомьтесь с руководством http://java-sl.com/editor_kit_tutorial_views.html.

О методе

protected void layoutMajorAxis (int targetSpan, int axis, int[] offsets, int[] spans)

Фактически он определяет позиции и промежутки детей. Рассмотрим layoutMajorAxis для абзаца. Таким образом, мы размещаем строки абзаца targetSpan — это количество места, которое мы хотели бы получить (в нашем случае это высота абзаца, это может быть, например, высота страницы или высота ячейки таблицы). Давайте рассмотрим простой случай, когда высота равна ширине JEditorPane 100 пикселей. Таким образом, мы должны рассчитать, где будет начинаться каждая строка (смещения) и сколько места она потребует (промежутки). ось Y_AXIS

так что если мы, например. вызовите super.layoutMajorAxis для абзаца, а затем измените смещения на 5, 10, 15 и т. д. у нас будут перекрывающиеся строки.

Но если мы рассмотрим layoutMajorAxis для строки абзаца (например, наш текст содержит жирное слово, поэтому строка имеет 3 дочерних элемента).

В этом случае targetSpan — это ширина абзаца владельца, смещения — это начало каждого элемента, а span — это размеры каждого текстового элемента.

Вопрос: 1. Дает ли метод offsets.length количество «элементов» в «массиве» смещения, как это делает метод array.length (с первым «элементом», имеющим индекс 0), или это общая сумма массива offset []. например, следуя примеру по ссылке, смещение по оси Y равно {10,30,50}, так что offsets.length = 10+30+50, что равно 90? или он меняется в зависимости от конкретного дочернего представления, о котором идет речь?

2. Если моей основной осью является ось Y, в этом методе будет ли диапазон этого конкретного метода также относиться к оси Y? Если это так, то смещения по оси x могут измениться, поэтому будут ли смещения по оси x обрабатываться в методе layoutMinorView()?

поправки приветствуются. Заранее спасибо.


person Afroid1000    schedule 19.07.2017    source источник


Ответы (1)


Размер массивов offsets и spans определяется количеством дочерних представлений.

Предположим, абзац имеет 3 строки текста. Тогда длины массивов смещений и промежутков равны 3.

Вы должны определить смещения (положение в пикселях для каждой строки). Обычно первые смещения начинаются с 0 (если нет запаса).

Промежутки отражают размер каждого дочернего представления (опять же в пикселях).

В случае абзаца предположим, что у вас есть 3 равные строки с высотой = 12. Нет маржи.

Итак, после вызова

protected void layoutMajorAxis(int targetSpan, int axis, int[] offsets, int[] spans)

должны возвращать смещения [0, 12, 24] и интервалы [12, 12, 12].

Если, например. 2-я строка содержит текстовый фрагмент высотой 20 (крупный шрифт), смещения и интервалы должны быть

смещения [0, 12, 32] и интервалы [12, 20, 12].

person StanislavL    schedule 20.07.2017
comment
Да спасибо! Теперь я вижу тонкости и двусмысленности этого метода... span отличается в зависимости от того, добавляю ли я текст в виде пакета через insertString() или динамически связывая текст... большое спасибо. - person Afroid1000; 25.07.2017