Каскадное и мозаичное расположение фреймов Java

Каскадное и мозаичное расположение фреймов JavaВ операционной системе Windows предусмотрено несколько команд для организации каскадного(cascading) расположения фреймов с перекрытием(см. рис. 1) и мозаичного(tiling) расположения фреймов безе перекрытия(см. рис. 2). Однако в классах JDesktopPane и JInternalFrame не предусмотрено никаких средств для поддержки этих операций. В программе которая находится в конце статьи показано, как можно самостоятельно организовать такое упорядочение фреймов.

Для каскадного расположения нужно указать для фреймов одинаковый размер и указывать их позиции с одинаковым шагом.

Каскадное и мозаичное расположение фреймов JavaРис. 1. Каскадное расположение фреймов

Каскадное и мозаичное расположение фреймов JavaРис. 2. Мозаичное расположение фреймов

Для получения массива всех внутренних фреймов используется метод getAllFrames() класса JDesktopPane:

Однако при этом нужно учитывать текущее состояние фрейма, которое может быть таким:

  • пиктограмма, то есть фрейм полностью свернут;
  • фрейм имеет обычные размеры и допускает их изменение;
  • фрейм полностью развернут.

Для поиска полностью свернутых фреймов, которые нужно пропустить, следует применять метод isIcon(). Для полностью развернутых фреймов нужно задать их обычный размер с помощью метода setMaximum(false). На изменение этого свойства также может быть наложен запрет, следовательно, необходимо организовать перехват исключения PropertyVetoException.

Ниже представлен цикл перебора всех внутренних фреймов панели рабочего стола:

Мозаичное расположение фреймов организовать гораздо сложнее, особенно если количество фреймов таково, что они не образуют в точности квадратную решетку. Сначала необходимо подсчитать количество несвернутых фреймов, а затем определить количество строк мозаики:

После этого определяется количество столбцов за исключением последнего:

Последний незаполненный столбец выявляется так:

Ниже представлен цикл перебора всех внутренних фреймов рабочего стола, которые будут расположены в виде мозаики:

В программе, которая будет рассмотрена далее, показана еще одна распространенная операция: перемещение выбора от текущего фрейма к следующему несвернутому фрейму. Нужно вручную организовать обход всех фреймов и вызов метода isSelected() до тех пор, пока не будет найден текущий выбранный фрейм. Затем нужно найти следующий несвернутый фрейм и попытаться выбрать его с помощью приведенного ниже метода:

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

Код всей программы:

 

Комментариев 4 на “Каскадное и мозаичное расположение фреймов Java

  1. Обратите внимание на 146 строку. Там лишняя » ; » (точка с запятой). Фрейм закрываться не будет.

  2. Если при всех закрытых фреймах нажать кнопку «Следующее» то прога зависает. Необходимо добавить обработку исключительной ситуации if из строки 277 (например else после строки 300 выводящее сообщение «низя»).

  3. Чтобы поправить эту ошибку достаточно добавить после строки 298:
    next = (next + 1) % frames.length;

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *