我正在开发一个项目,使JApplet的内容自动缩放到html中指定的大小。我意识到这就是布局管理器的用途,但由于不允许重新编写整个applet结构,我决定尝试覆盖paint方法并简单地设置Graphics对象的AffineTransform为适当缩放的版本,然后在顶级容器中捕获鼠标事件并使用适当的缩放变换将它们缩小回来。目前我遇到了绘图问题。在Web浏览器中查看时,它会正确地呈现缩放版本一次,然后将图像缩小回其原始大小。此外,似乎JApplet中的paint方法只被调用一次。以下是我的代码剪辑版本,重点关注问题。任何帮助都将不胜感激。谢谢。
import javax.swing.JApplet;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
public class Test extends JApplet
{
public static final int ORIGINAL_APPLET_WIDTH = 1024;
public static final int ORIGINAL_APPLET_HEIGHT = 800;
private AffineTransform scalingTransform;
private AffineTransform inverseScalingTransform;
@Override
public void init()
{
double xFactor = ((double)(this.getWidth()))/((double)(Test.ORIGINAL_APPLET_WIDTH));
double yFactor = ((double)(this.getHeight()))/((double)(Test.ORIGINAL_APPLET_HEIGHT));
this.scalingTransform = new AffineTransform();
this.inverseScalingTransform = new AffineTransform();
this.scalingTransform.scale(xFactor,yFactor);
this.inverseScalingTransform.scale(1D/xFactor,1D/yFactor);
}
@Override
public void paint(Graphics g)
{
((Graphics2D)g).setTransform(Test.this.scalingTransform);
super.paint(g);
}
}