Swing: Что хороший путь состоит в том, чтобы реализовать полностью масштабируемые компоненты?

Вы можете сделать что-то вроде этого:

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(width_physical_pixels, height_physical_pixels);
imageView.setLayoutParams(layoutParams);

Но в параметрах требуется пиксель, поэтому вам придется использовать формулу для преобразования пикселей в dp, например, вы можете использовать это для преобразования :

float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

Собираем все воедино:

//Get screen density to use in the formula.
float scale = getBaseContext().getResources().getDisplayMetrics().density;    
px = dp_that_you_want * (scale / 160);

LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(px, px);
imageView.setLayoutParams(layoutParams);

Я не знаю, если это то, что вы ищете, или это сработает, поэтому дайте мне знать, если это так ,

1
задан ivan_ivanovich_ivanoff 23 June 2009 в 11:58
поделиться

4 ответа

Я сделал это путем создания настраиваемого менеджера по расположению. Каждый компонент (или, скорее, класс компонента) в кадре имеет маркер независимо от того, должен ли он изменяться в размере при изменении размера контейнера (например, размер таблиц изменяется, а кнопки - нет). Те, размер которых не изменен, перемещаются при изменении размера контейнера.

1
ответ дан 3 September 2019 в 01:16
поделиться

Если я смотрю на эту проблему как на визуальный редактор UML, то мне приходилось думать об одном компоненте «холста», рисующем каждый элемент как графический объект с базовым соотношением сторон и увеличением / уменьшением. Я не вижу причин для выравнивания списка компонентов в родительском контейнере.

0
ответ дан 3 September 2019 в 01:16
поделиться

Вот почему существуют менеджеры компоновки: они сообщают содержащимся компонентам, где и насколько они должны быть большими.

Поскольку вы говорите о редакторе UML, используете ли вы содержащиеся компоненты Swing для представления различные объекты на диаграмме (например, компонент класса)? Если да, то у вас впереди много работы (хотя это не обязательно плохой подход). Я бы рекомендовал создать объект ограничений, который определяет местоположение объекта в «единичном пространстве», а затем умножить его на текущий размер.

1
ответ дан 3 September 2019 в 01:16
поделиться

Я начал аналогичное решение, которое отлично работает, не затрагивая исходный макет.

Это так просто:

// Install scalable layout and CTRL+/CTRL- keys for scaling operations
ScalableLayoutUtils.installScalableLayoutAndKeys(new DefaultScalableLayoutRegistry(),  frame, 0.1);

Оно все еще находится в разработке, но скоро будет доступно как часть следующая версия "utils4swing".

0
ответ дан 3 September 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: