Я ищу способы увеличить Java приложение Swing. Это означает, что я хотел бы изменить размер всех компонентов в данном JPanel данным фактором, как будто я сделаю снимок экрана UI и просто применил "Операцию" масштаба изображения. Размер шрифта, а также размер флажков, текстовых полей, курсоры и т.д. должны быть скорректированы. Возможно масштабироваться, компонент применением преобразовывает к графическому объекту:
protected Graphics getComponentGraphics(Graphics g) {
Graphics2D g2d=(Graphics2D)g;
g2d.scale(2, 2);
return super.getComponentGraphics(g2d);
}
Это работает, пока Вы не заботитесь о самообновлении компонентов. Если у Вас есть текстовое поле в Вашем приложении, этот подход прекращает работать, так как текстовое поле обновляет себя каждую секунду для показа (мигающего) курсора. И так как это не использует измененный графический объект на этот раз, компонент появляется в старом местоположении. Существует ли возможность изменить объект графики компонентов постоянно? Существует также проблема с обработчиками событий нажатия мыши. Другая возможность состояла бы в том, чтобы изменить размер всех дочерних компонентов JPanel (setPreferredSize) к новому размеру. Это не работает на флажки, так как отображенное изображение флажка не изменяет свой размер. Я также думал о программировании моего собственного менеджера по расположению, но я не думаю, что это будет работать, так как менеджеры по расположению только меняют положение (и размер) объектов, но не могут масштабировать во флажки (см. предыдущий абзац). Или я неправильно с этой гипотезой? У Вас есть какие-либо идеи, как можно было достигнуть zoomable Swing GUI, не программируя пользовательские компоненты? Я искал поворотные пользовательские интерфейсы, потому что проблема кажется знакомой, но я также не нашел удовлетворяющего решения этой проблемы.
Спасибо за Вашу справку, Chris
Вы можете попробовать библиотеку JXLayer .
В нем есть несколько инструментов, которые могут помочь вам увеличить изображение. Посмотрите примеры , показанные здесь . Я бы порекомендовал вам больше узнать о TransformUI из этой библиотеки. Из этого примера кажется, что это может помочь решить вашу проблему.
Масштабировать вид достаточно просто; преобразование координат мыши лишь немного сложнее. Вот элементарный пример. Я бы не использовал JComponent
, хотя, возможно, имеет смысл разработать аналогичный ScaledComponent
, который знает о геометрии. Вот тут-то и приходит на помощь предложение @Gnoupi об использовании библиотеки.