JScrollPane滚动条中的JPanel未显示



>我目前正在尝试使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 上的项目。