2016-09-22 4 views
0

과제에 대해 두 개 이상의 도형, 두 가지 이상의 색상을 포함하고 모양을 이동하도록 기존 코드를 수정하라는 요청을 받았습니다. 나는 약간의 흥분을 감추었고 더 많은 것을 추가하기 시작했으나 지금은 문제가 있습니다. 왼쪽 팔을 추가 할 때까지 모든 것이 잘 진행되고있었습니다 (화면에서 보았을 때). 나는 그림을 오른쪽으로 움직일 때 이전 위치에 남아있는 팔 조각에 문제가있다. 위, 아래, 왼쪽 모두 잘 작동하며 문제가 발생한 곳에서만 올바르게 작동합니다. 숫자를 오른쪽으로 두 번 이동 한 후 나타나는 모양의 스크린 샷을 추가했습니다. 도움을 주셔서 감사합니다. 당신이 프레임을 칠 필요가 같이 roboMan output한 줄 (모양)을 번역 할 때 문제가 발생했습니다.

import javax.swing.JFrame; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import javax.swing.JComponent; 
import java.awt.geom.Ellipse2D; 
import java.awt.geom.Line2D; 
import java.awt.Color; 
import java.awt.Polygon; 
import java.util.Scanner; 
import java.awt.geom.Ellipse2D; 

public class SwingBot1 { 

public static void main(String[] args) { 

    // contruction of new JFrame object 
    JFrame frame = new JFrame(); 

    // mutators 
    frame.setSize(400,400); 
    frame.setTitle("SwingBot"); 

    // program ends when window closes 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Robot r = new Robot(); 

    frame.add(r); 

    // voila! 
    frame.setVisible(true); 


    // your Scanner-based command loop goes here 
    Scanner in = new Scanner(System.in); 
    boolean active = true; 
    while(active){ 
     System.out.println("Enter \"up\", \"down\", \"left\", or \"right\" " 
       + "to move.\nClose the window to quit."); 
     String direction = in.nextLine(); 
     switch(direction){ 
     case "up": 
      r.moveBot(0, -20); 
      break; 
     case "down": 
      r.moveBot(0, 20); 
      break; 
     case "right": 
      r.moveBot(20, 0); 
      break; 
     case "left": 
      r.moveBot(-20, 0); 
      break; 

     } 
    } 
} 
public static class Robot extends JComponent 
{ 
    private Rectangle rect = new Rectangle(45, 30, 20, 20); 

    int x = 30; 
    int y = 50; 
    public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     // set the color 
     g2.setColor(Color.RED); 
     // draw the shape` 
     g2.fill(rect); 

     Graphics2D g3 = (Graphics2D) g; 
     g3.setColor(Color.BLUE); 
     g3.draw(new Ellipse2D.Double(30, 50, 50, 100)); 
     g3.fillOval(30, 50, 50, 100); 

     Graphics2D g4 = (Graphics2D) g; 
     g4.setColor(Color.GREEN); 
     g4.draw(new Line2D.Double(70, 141, 90, 190)); 
     g4.draw(new Line2D.Double(39, 141, 30, 191)); 

     Graphics2D g5 = (Graphics2D) g; 
     g5.setColor(Color.RED); 
     g5.draw(new Line2D.Double(80, 85, 125, 70)); 

     //arm, left as viewed 
     g5.draw(new Line2D.Double(0, 70, 30, 85)); 


    } 


    public void moveBot(int x, int y) 
    { 
     setX(getX()+x); 
     setY(getY()+y); 
     repaint(); 
    } 

    public int getX() 
    { 
     return x; 
    } 
    public void setX(int x) 
    { 
     this.x = x; 
    } 
    public int getY() 
    { 
     return y; 
    } 
    public void setY(int y) 
    { 
     this.y = y; 
    } 
    /* public void moveBot(int x, int y) 
    { 
     // move the rectangle 
     rect.translate(x,y); 
     // redraw the window 
     poly.translate(x, y); 
     repaint(); 

    }*/ 

    } 
} 
+0

프레임을 다시 칠해보십시오. – Taylor

+0

@ 테일러 감사합니다. 완벽하게 작동했습니다. – PoundingHead

+0

답변으로 다시 추가하겠습니다. – Taylor

답변