アプレットの上に線を描くことができるかどうか疑問に思っています。
できますよ。アプレットにパネルを配置し、マウス モーション リスナーを追加して、イベントに従ってそのパネルに描画するだけです。
これを示す小さな例
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TestAppletDraw extends JApplet {
public static class MyDrawPanel extends JPanel {
private List<Point> points = new ArrayList<Point>();
public MyDrawPanel() {
setBackground(Color.WHITE);
MouseAdapter listener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
points.clear();
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
points.add(e.getPoint());
repaint();
}
};
addMouseListener(listener);
addMouseMotionListener(listener);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
@Override
protected void paintComponent(java.awt.Graphics g) {
super.paintComponent(g);
Point p1 = null;
Point p2 = null;
g.setColor(Color.BLUE);
for (Point p : points) {
p2 = p1;
p1 = p;
if (p1 != null && p2 != null) {
g.drawLine(p1.x, p1.y, p2.x, p2.y);
}
}
}
}
protected void initUI() {
add(new MyDrawPanel());
validate();
}
@Override
public void init() {
super.init();
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
initUI();
}
});
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
注意: ポイントを保存する代わりにバッファリングされた画像を使用すると、長期間にわたってよりスケーラブルになる可能性があります (そうしないと、ポイント リストが巨大になる可能性があります) が、パネル サイズの増加に注意する必要があります。