Я работаю над проектом, чтобы содержимое JApplet автоматически масштабировалось до размера, указанного в html. Я понимаю, что именно для этого были созданы менеджеры компоновки, однако, поскольку мне не разрешено переписывать всю структуру апплетов, я решил, что попытаюсь переопределить рисование и просто установить AffineTransform объекта Graphics в надлежащим образом масштабированную версию. , затем захватите События мыши в верхнем контейнере и масштабируйте их обратно с помощью соответствующего преобразования масштабирования. Я застреваю на чертеже в данный момент. При просмотре в веб-браузере он корректно отображает масштабированную версию один раз, а затем изображение возвращается к исходному размеру. Кроме того, кажется, что метод рисования в JApplet вызывается только один раз. Вот урезанная версия моего кода, которая фокусируется на проблеме. Любая помощь будет оценена. Заранее спасибо.
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);
}
}