だから私はここで決勝戦に向けて勉強しているだけで、これをうまく機能させるのに苦労しています。以前私がいつも行っていたことは、paintComponent(Graphics g) を呼び出すことであり、物事はうまく機能しました。しかし、コンパイルしようとすると、「paintComponent has protected access in JComponent」というエラーが表示されます。コンパイルできるようにする唯一の方法は、ペイントを呼び出すように指示することでした。しかし、コンパイルしても、アプレット ウィンドウでペイントが呼び出されることはありません。ここには何が表示されていませんか?
public class LineDraw extends JComponent
{
private final Point p1;
private final Point p2;
private final JApplet callingWindow;
private final ArrayList<Line2D.Double> lines;
public LineDraw(JApplet callingWindow)
{
this.p1 = new Point();
this.p2 = new Point();
this.callingWindow = callingWindow;
this.lines = new ArrayList<Line2D.Double>();
MouseListener mouse = new MouseHandler();
callingWindow.addMouseListener(mouse);
}
public class MouseHandler extends MouseAdapter
{
private boolean firstClick;
public MouseHandler()
{
firstClick = true;
}
public void mouseClicked(MouseEvent e)
{
if(firstClick)
{
p1.setLocation(e.getPoint());
firstClick = false;
}
else
{
p2.setLocation(e.getPoint());
lines.add(new Line2D.Double(p1, p2));
p2.setLocation(p1.getLocation());
callingWindow.repaint();
}
}
public void paintComponent(Graphics2D g2)
{
for(Line2D.Double e: lines)
{
g2.draw(e);
}
}
}
}
そしてアプレットクラス自体
public class AppletWin extends JApplet
{
private LineDraw lineDrawer;
public void init()
{
setBackground(Color.white);
lineDrawer = new LineDraw(this);
}
public void paint(Graphics h)
{
Graphics2D g = (Graphics2D)h;
//Clear background
g.setColor(getBackground());
g.fillRect(1, 1, getWidth(), getHeight());
lineDrawer.paintComponent(g);
}
}