【问题标题】:Etch a Sketch Issue蚀刻草图问题
【发布时间】:2013-09-19 18:40:15
【问题描述】:

我正在用 java 编写一个程序,以便它可以模仿蚀刻草图。我有它来画线,但我似乎无法让它画出一条连续的线。我是这方面的初学者,将不胜感激。谢谢 !

这是我目前的代码..

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) {}
    }

【问题讨论】:

    标签: java draw etch


    【解决方案1】:

    问题在于 SketchPanel 不记得之前绘制的线条。您可能应该使用 BufferedImage 进行绘制(您可以在 keyPressed 中进行绘制),然后将该图像绘制到 paintComponent 中的 Graphics 对象上。

    【讨论】:

      猜你喜欢
      • 2015-07-15
      • 1970-01-01
      • 2013-07-24
      • 2014-11-20
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多