В настоящее время я пытаюсь выяснить, как увеличить масштаб изображения JPanel
, на котором нарисована графика. В настоящее время JPanel
встроен в JScrollPane
, что позволяет пользователю прокручивать, когда уровень масштабирования превышает 100%.Увеличение графики на JPanel
Прямо сейчас, я могу правильно масштабировать панель, но AffineTransform не применяется к событиям мыши. Также, когда видны scrollBars
, они слишком длинны. Я не хочу, чтобы они были длиннее исходного размера JPanel
.
private AffineTransform m_zoom;
@Override
protected void paintComponent(Graphics p_g) {
if (m_mainWindow != null) {
m_zoom = ((Graphics2D) p_g).getTransform();
m_zoom.scale(m_scale, m_scale);
((Graphics2D) p_g).transform(m_zoom);
super.paintComponent(p_g);
}
p_g.dispose();
}
public void setScale(double p_scale) {
m_scale = p_scale;
repaint();
revalidate();
}
Если кто-то может помочь мне со всем этим, это было бы очень признательно! Спасибо
События мыши будут * никогда * изменяться в соответствии с вашим увеличением. В Swing нет концепции масштабирования. Вы должны сделать математику самостоятельно в своих (мышах) слушателях. Что касается полосы прокрутки, которая слишком длинна, снова ее * ваш код *, который управляет предпочтительным размером вашей панели, правильно установите его для уровня масштабирования, и полосы прокрутки будут соответствовать ему. Также вы должны * никогда не удалять графический объект, переданный вашему методу paintComponent. – Durandal
Вы можете делать то, что вы пытаетесь сделать с использованием JXLayer/JLayer. Связанный дублированный вопрос/ответ имеет runnable пример, который не только позволит вам масштабировать графику, но и события по мере их возникновения, что действительно круто об этом, это работает в основном на всех компонентах Swing – MadProgrammer