Изменение размера JPanel с повторной выборкой для сохранения содержимого - PullRequest
3 голосов
/ 29 марта 2012

Допустим, я написал JPanel со многими различными компонентами, есть ли способ применить общую способность "расширять" на панели, чтобы все в ней растягивалось пропорционально при изменении размера моего окна?

То есть, если я вручную изменю размер своего окна до 1/4 размера, все на панели также должно уменьшиться на 1/4, так что новая панель - это просто расширение первого.Учитывая, что я не разработал отдельные компоненты внутри, чтобы сделать это (их много), есть ли какой-нибудь простой способ заставить панель вести себя таким образом?

ОБНОВЛЕНИЕ : чтобы быть болееЧтобы понять, какое решение мне нужно, я опишу содержимое панели:

Панель - это своего рода «игра», с одним макетом и нулевыми изображениями, которые летают по экрану в любое время.ImageIcons - это предварительно загруженные файлы PNG, которые уже имеют постоянный размер.Конечно, я мог бы вручную изменить размеры каждого ImageIcon и переместить их относительно размера окна, но это потребовало бы перекодирования многих компонентов.

Нет никаких кнопок или текста, о которых нужно беспокоиться, поэтому я действительно ищукакое-то «постобработанное» изменение размера, при котором панель просто сжимает то, что визуализируется какой-то порцией (подумайте об изменении размера изображения в Photoshop).

Ответы [ 4 ]

2 голосов
/ 29 марта 2012

Один из вариантов, конечно, отказаться от всех вместе и использовать какую-нибудь стороннюю библиотеку компонентов виджетов, которая рисует сама себя, используя любой Graphics.Затем вы можете нарисовать виджеты на изображении и изменить его размер, или, что еще лучше, применить преобразование к графическому объекту, который вы передаете в библиотеку.

Если вы хотите придерживаться свинга, то естьSwingUtilities.paintComponent метод, который вы можете использовать, чтобы нарисовать Panel на BufferedImage, который затем можно изменить.(Я сам использовал это, чтобы сделать несколько хороших переходов между «представлениями» в игре.)

Проблема, конечно, в том, что вам как-то нужно соответствующим образом перевести пользовательский ввод.У меня сейчас нет решения для этого, но, возможно, вышесказанное может вам как-то помочь.

1 голос
/ 29 марта 2012

Вы можете попробовать слой J (X), см. http://www.pbjar.org/blogs/jxlayer/jxlayer40/

1 голос
/ 29 марта 2012

Вы можете попытаться переопределить paintChildren() метод панели и масштабировать графику для достижения желаемого видимого размера.

1 голос
/ 29 марта 2012

Использование менеджеров компоновки вместо абсолютного позиционирования виджетов даст вам такое поведение. Смотрите руководства по оракулу: Использование менеджеров по макету .

Вы действительно хотите, чтобы размер шрифтов изменялся при изменении размера событий? Я не знаю менеджера верстки, который сделает это за вас.

...