2013-09-19 3 views
0

Я пишу программу в java, чтобы она могла имитировать этюд эскиза. У меня есть это, чтобы рисовать линии, но я не могу заставить его рисовать сплошную линию. Я новичок, так много помощи будет оценено. Благодаря !Etch a Sketch Issue

вот мой код до сих пор ..

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 



    public class Sketch 
     { 
    public static void main (String [] args){ 
    SketchFrame frame = new SketchFrame(); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.setVisible(true); }} 


    // JFrame: defines app's window 
    class SketchFrame extends JFrame 
    { 
    public static final int WIDTH = 600; 
    public static final int HEIGHT = 600; 
    public static final String FRAME_TITLE = "Sketch"; 

public SketchFrame() 
    { 
    setTitle(FRAME_TITLE); 
    setSize(WIDTH, HEIGHT); 

    add(new SketchPanel()); 
    } 
    } 



    class SketchPanel extends JPanel 
    implements KeyListener { 

private int xStart = 0; 
private int yStart = 0; 
private int xEnd = 0; 
private int yEnd = 0; 


    public SketchPanel() { 
    addKeyListener(this); 
    setFocusable(true); 
} 


    public void keyPressed(KeyEvent e) { 

    if (e.getKeyCode() == KeyEvent.VK_UP) { 
     yStart = yEnd; 
     xStart = xEnd; 
     yEnd -= 50; 


    } 
    else if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
     yStart = yEnd; 
     xStart = xEnd; 
     yEnd += 10; 

    } 
    else if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
     xStart = xEnd; 
     yStart = yEnd; 
     xEnd -= 10; 

    } 
    else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
     xStart = xEnd; 
     yStart = yEnd; 
     xEnd += 10; 

    } 

    repaint(); 
    } 


public void paintComponent(Graphics g) { 

    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D)g; 

    g2.setColor(Color.RED); 
    g2.drawLine(drawXStart(), drawYStart(), drawXEnd(), drawYEnd()); 

} 

    private int drawXStart() { 
     return (getWidth()/2) + xStart; 
    } 

    private int drawXEnd() { 
     return (getWidth()/2) + xEnd; 
    } 

    private int drawYStart() { 
     return (getHeight()/2) + yStart; 
    } 

    private int drawYEnd() { 
     return (getHeight() /2) + yEnd; 
    } 


public void keyReleased(KeyEvent e) {} 



public void keyTyped(KeyEvent e) {} 
    } 

ответ

0

Проблема заключается в том, что SketchPanel не помнит линии нарисованные ранее. Вероятно, вы должны использовать BufferedImage для рисования (вы можете сделать рисунок в keyPressed) и нарисовать это изображение на объекте Graphics в paintComponent.