我目前正试图让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));
答案 0 :(得分:1)
组件的大小也会受到缩放系数的影响,为此,将preferredSize
设置为"静态"值没有意义,相反,你应该覆盖getPreferredSize
并调整返回的大小,同时也应用缩放因子。
缩放组件比更改变换要复杂得多,您也应该翻译鼠标事件,例如,请参阅How to add MouseListener to item on Java Swing Canvas。