ペン ツールを使用して Java アプレットを実装してみます。アプレットを起動すると、マウスを押して放すことで、ウィンドウに線を正しく描画できます。数秒後、すべてが消えます。これを修正するためのヒントはありますか?
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class MarkPen extends Applet implements ActionListener, AdjustmentListener, MouseListener, MouseMotionListener {
private int x = 0;
private int y = 0;
private int prevx = 0;
private int prevy = 0;
private boolean dragging = true;
private Panel drawPanel = new Panel();
public void init()
{
setLayout(new BorderLayout());
drawPanel.setBackground(Color.white);
add(drawPanel, "Center");
drawPanel.addMouseMotionListener(this);
drawPanel.addMouseListener(this);
}
public void setGraphicalDefaults(MouseEvent e)
{
x = e.getX();
y = e.getY();
prevx = e.getX();
prevy = e.getY();
}
public void mouseDragged(MouseEvent e)
{
Graphics g = drawPanel.getGraphics();
g.setColor(Color.black);
/*
IF i'm not dragging...
*/
if (dragging)
{
setGraphicalDefaults(e);
dragging = false;
g.drawLine(prevx,prevy,x,y);
}
/*
If mouse moved..
*/
if (x != e.getX() || y != e.getY())
{
x = e.getX();
y = e.getY();
g.drawLine(prevx,prevy,x,y);
prevx = x;
prevy = y;
}
}
public void mouseReleased(MouseEvent e)
{
dragging = true;
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void adjustmentValueChanged(AdjustmentEvent arg0){}
public void actionPerformed(ActionEvent e){}
}
新しいバージョン: 私は自分のコードを修正しました。以下に動作中のバージョンがあります
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JPanel;
public class MarkPen extends Applet implements ActionListener, AdjustmentListener, MouseListener, MouseMotionListener {
private int x = 0;
private int y = 0;
private int prevx = 0;
private int prevy = 0;
private JPanel drawPanel = new JPanel();
public void init()
{
setLayout(new BorderLayout());
drawPanel.setBackground(Color.white);
add(drawPanel, "Center");
drawPanel.addMouseMotionListener(this);
drawPanel.addMouseListener(this);
drawPanel.add(new Comp());
drawPanel.setDoubleBuffered(true);
}
public void setGraphicalDefaults(MouseEvent e)
{
x = e.getX();
y = e.getY();
prevx = e.getX();
prevy = e.getY();
}
public class Comp extends JComponent{
public void paintComponent(Graphics g) {
super.paintComponent(g);
g = drawPanel.getGraphics();
g.setColor(Color.black);
g.drawLine(prevx,prevy,x,y);
prevx = x;
prevy = y;
g.dispose();
repaint();
}
}
public void mouseDragged(MouseEvent e)
{
if (x != e.getX() || y != e.getY())
{
x = e.getX();
y = e.getY();
}
}
public void mousePressed(MouseEvent e){
setGraphicalDefaults(e);
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void adjustmentValueChanged(AdjustmentEvent arg0){}
public void actionPerformed(ActionEvent e){}
}