0
펜 도구로 Java 애플릿을 구현하려고합니다. 애플릿을 시작할 때 마우스를 눌렀다가 놓으면 창에서 내 선을 올바르게 그릴 수 있습니다. 몇 초 후에 모든 것이 사라집니다. 해결 방법이 있습니까?자바 Awt 펜 도구 : 그래픽이 사라졌습니다
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){}
}
NEW VERSION : 내 코드를 수정하고 여기에 아래의 작업 버전
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){}
}
답변 해 주셔서 감사합니다. 제 코드가 수정되었습니다. 나는 작업 버전을 게시합니다. – user2195984