Подтвердить что ты не робот

Масштабирование и масштабирование внутри панели

У меня есть панель, в которой движутся некоторые 2D-объекты. При необходимости я переопределил paintComponent(). Теперь я хочу иметь возможность масштабировать и уменьшать масштаб этой области. При масштабировании появятся полосы прокрутки, с помощью которых можно просмотреть все поле с помощью прокрутки. При масштабировании и выводе 2D-объекты должны соответственно увеличиваться или уменьшаться. Какой компонент Swing или, скорее, комбинация компонентов помогут достичь этого?

4b9b3361

Ответ 1

Самый простой способ - изменить панель и ввести двойное значение, указывающее уровень масштабирования. Этот двойник будет показывать ваш масштаб, где 1 нормальный и более высокий, увеличен. Вы можете использовать этот двойник вместе с Graphics2D в paintComponent.

Например:

Graphics2D g2 = (Graphics2D) g;
int w = // real width of canvas
int h = // real height of canvas
// Translate used to make sure scale is centered
g2.translate(w/2, h/2);
g2.scale(scale, scale);
g2.translate(-w/2, -h/2);

Для прокрутки поместите свою панель в JScrollPane и объедините ее с помощью getPreferredSize, который также использует масштаб масштабирования. JScrollPane использует предпочтительный размер компонента, который вы в него вложили. Он покажет полосы прокрутки, если предпочтительный размер превышает собственный размер.

Если вы измените предпочтительный размер вашей панели, чтобы увеличить ширину и высоту, вы должны быть в порядке. В принципе, вы можете просто вернуть что-то вроде:

return new Dimension(w * scale, h * scale)