2016-09-22 114 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

回答

0

它看起來像你需要重新繪製框架。