在 JPanel 上缩放图形
Zoom graphics on JPanel
我目前正在研究如何放大绘制有图形的 JPanel
。 JPanel
当前嵌入在 JScrollPane
中,当缩放级别超过 100% 时,应该允许用户滚动。
现在,我可以正确放大面板,但 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();
}
如果有人能帮助我解决所有这些问题,将不胜感激!
谢谢
好的,我知道 JScrollPane
是怎么回事了。我根据新的缩放级别手动调整了 JPanel
的大小并且有效。
public void setScale(double p_newScale) {
m_scale = p_newScale;
int width = (int) (getWidth() * m_scale);
int height = (int) (getHeight() * m_scale);
setPreferredSize(new Dimension(width, height));
repaint();
revalidate();
}
我仍然需要找到一种方法来计算 JPanel
缩放 in/out 时鼠标的位置。我应该直接在我的自定义 JPanel
class 中覆盖 mouseClicked
和 mouseMoved
方法吗?
编辑:
我在 JPanel 上对相对坐标使用了简单的除法。它对 mouseMoved 和 mouseClicked 都非常有效。
Point zoomedLocation = new Point((int)(evt.getPoint().x / m_zoomFactor),
(int)(evt.getPoint().y / m_zoomFactor));
而且我到处都使用 zoomedLocation
而不是 evt.getPoint()
。
我目前正在研究如何放大绘制有图形的 JPanel
。 JPanel
当前嵌入在 JScrollPane
中,当缩放级别超过 100% 时,应该允许用户滚动。
现在,我可以正确放大面板,但 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();
}
如果有人能帮助我解决所有这些问题,将不胜感激! 谢谢
好的,我知道 JScrollPane
是怎么回事了。我根据新的缩放级别手动调整了 JPanel
的大小并且有效。
public void setScale(double p_newScale) {
m_scale = p_newScale;
int width = (int) (getWidth() * m_scale);
int height = (int) (getHeight() * m_scale);
setPreferredSize(new Dimension(width, height));
repaint();
revalidate();
}
我仍然需要找到一种方法来计算 JPanel
缩放 in/out 时鼠标的位置。我应该直接在我的自定义 JPanel
class 中覆盖 mouseClicked
和 mouseMoved
方法吗?
编辑:
我在 JPanel 上对相对坐标使用了简单的除法。它对 mouseMoved 和 mouseClicked 都非常有效。
Point zoomedLocation = new Point((int)(evt.getPoint().x / m_zoomFactor),
(int)(evt.getPoint().y / m_zoomFactor));
而且我到处都使用 zoomedLocation
而不是 evt.getPoint()
。