JScrollPane滚动条中的JPanel没有显示出来

时间:2014-11-25 06:09:06

标签: java swing jpanel zoom jscrollpane

我目前正试图让JPanel放大。我的想法大致如下:

我有一个JPanel(自定义的覆盖paintComponent等),我放在我的JScrollPane中。

我要放大的是使用以下代码扩展我的JPanel(覆盖绘制方法)

@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));

1 个答案:

答案 0 :(得分:1)

组件的大小也会受到缩放系数的影响,为此,将preferredSize设置为"静态"值没有意义,相反,你应该覆盖getPreferredSize并调整返回的大小,同时也应用缩放因子。

缩放组件比更改变换要复杂得多,您也应该翻译鼠标事件,例如,请参阅How to add MouseListener to item on Java Swing Canvas