【发布时间】:2015-12-09 16:46:48
【问题描述】:
我目前正试图弄清楚如何放大上面绘制了图形的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();
}
如果有人能帮我解决这一切,那将不胜感激! 谢谢
【问题讨论】:
-
鼠标事件将永远改变以匹配您的缩放。 Swing 中没有缩放的概念。您必须自己在(鼠标)听众中进行数学运算。至于滚动条“太长”,同样是它的 your code 控制面板的首选大小 - 为缩放级别正确设置它,滚动条将匹配它。此外,您应该从不处置传递给您的paintComponent 方法的图形对象。
-
您实际上可以使用 JXLayer/JLayer 做您想做的事情。链接的重复问题/答案具有可运行的示例,它不仅可以让您缩放图形,还可以缩放发生的事件,这真的很酷,它基本上适用于所有基于 Swing 的组件
标签: java swing jpanel zooming affinetransform