>我目前正在尝试使JPanel可以放大。我的想法大致如下:
我有一个JPanel(自定义覆盖的paintComponent等),我把它放在我的JScrollPane中。
我要放大的是使用以下代码放大我的 JPanel(重写 paint 方法)
@Override
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
if (m_hasBeenScaled)
{
m_transform.scale(m_zoomValue, m_zoomValue);
g2.setTransform(m_transform);
m_transform = new AffineTransform();
}
super.paint(g);
}
这很好用,但是当我缩放到更大的维度时,我的 JScrollPane 不显示滚动条。如何使 JScrollPane 响应我的 JPanel 的这种扩展?
以下是我用来创建我的 JPanel 和 JScrollPan 的代码(Grid 是我的扩展 JPanel 的类):
m_gridPanel = new Grid();
m_gridContainer = new JScrollPane(m_gridPanel);
m_gridContainer.setPreferredSize(new Dimension(605, 605));
组件的大小也会受到缩放系数的影响,为此,将preferredSize
设置为"静态"值是没有意义的,相反,您应该覆盖getPreferredSize
并通过对其应用缩放系数来调整返回的大小。
缩放组件比更改转换要复杂得多,您还应该转换鼠标事件,例如,请参阅如何将 MouseListener 添加到 Java Swing Canvas 上的项目。