繁体   English   中英

使用Affine Trasform进行缩放时,JPanel不会绘制

[英]JPanel does not paint when scaling with Affine Trasform

我的应用程序布局类似于:自定义JFrame(它只处理gui的创建),其中包含一个包含自定义JPanel的标准JPanel

在自定义JPanel(称为MinimapPanel)中,我更改了paint方法:

    //in a constructor:
    scaledTransform = new AffineTransform(); = new AffineTransform();
    scaledTransform = new AffineTransform();
    scaledTransform.scale(scaleAmount, scaleAmount);
    //...
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;
    g2d.setTransform(scaledTransform);
    mapDrawer.paintMinimap(g, seatMap, miniViewHandler);//it just calls a bunch of fillRect

    if (viewRect != null) {
        g.setColor(new Color(255, 0, 0));
        int x = viewRect.x;
        int y = viewRect.y;
        g.drawRect(x, y, Math.abs(viewRect.width), Math.abs(viewRect.height));
    }
    g2d.setTransform(plainTransform);
}

如果我不应用trasform,或者如果缩放是1.0(无),一切正常,但如果我缩放,每次JFrame重绘时,MinimapPanel保持空白。

关于我可能做错的任何想法?

不要使用清晰的变换。 以前的组件添加自己的转换,例如translate()到子位置等。而是像这样调用代码

AffineTransform old=g2d.getTransform();
//do your changes here
g2d.scale(scaleAmount, scaleAmount);
//paint
g2d.setTransform(old);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM