2016-04-22 3 views
0

Я новичок в программировании на Java, и я использую BLUEJ для создания некоторых основных объектов и т. Д. У меня есть 4 объекта (3 прямоугольника и один треугольник), и я хочу использовать метод slowMoveHorizontal для переместите эти 4 объекта примерно на 50 пикселей вправо.Переместить объекты-объекты в bluej

До сих пор все работает, но проблема заключается в том, что они НЕ перемещаются одновременно. Они движутся по ОДИНУ НА ОДНОЙ основе.

Буду признателен за любую помощь.

Заранее спасибо.

public class PLFlag 
{ 
private MyRectangle greenRectangle; 
private MyRectangle whiteRectangle; 
private MyRectangle blackRectangle; 
private MyRectangle frame; 
private MyRectangle mast; 
private Triangle redTriangle; 


/** 
* Constructor for objects of class PLFlag 
*/ 
public PLFlag() 
{ 
    // nothing to do... instance variables are automatically set to null 
} 

/** 
* Draw this PLFlag. 
*/ 
public void draw() 
{ 
    mast = new MyRectangle(); 
    mast.makeVisible(); 
    mast.changeSize(400,5); 
    mast.changeColor("black"); 
    mast.moveVertical(-100); 
    mast.moveHorizontal(-55); 

    frame = new MyRectangle(); 
    frame.changeColor("black"); 

    frame.changeSize(122,180); 
    frame.slowMoveHorizontal(-50); 
    frame.moveVertical(-100); 
    frame.makeVisible(); 

    greenRectangle = new MyRectangle(); 
    greenRectangle.changeColor("green"); 

    greenRectangle.changeSize(40,179); 
    greenRectangle.moveHorizontal(-50); 
    greenRectangle.slowMoveVertical(-19); 
    greenRectangle.makeVisible(); 

    whiteRectangle = new MyRectangle(); 
    whiteRectangle.changeColor("white"); 

    whiteRectangle.changeSize(40,179); 
    whiteRectangle.moveVertical(-59); 
    whiteRectangle.moveHorizontal(-50);  
    whiteRectangle.makeVisible(); 

    redTriangle = new Triangle(); 
    redTriangle.changeSize(-90,-120); 
    redTriangle.changeColor("red"); 

    redTriangle.slowMoveHorizontal(210); 
    redTriangle.slowMoveVertical(-130);  
    redTriangle.makeVisible(); 




} 

}

+0

Пожалуйста, ваш код. – Bajal

+0

Если вам нужна помощь в StackOverflow, вам необходимо предоставить [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

+0

@Bajal я разместил его –

ответ

0

твой код не ждет, пока slowMove сек заканчивается, поэтому он может продолжать. Необходимо, чтобы slowMove выполнялся параллельно в отдельном потоке.

Оставьте этот код около каждыйslowMoveXXX() звонок.

new Thread() 
{ 
    public void run() { 
     //slowMove here. E.g.: 
     greenRectangle.slowMoveVertical(-19); 
    } 
}.start(); 

Кроме того, необходимо добавить ключевое слово final каждому объекту, который вы используете внутри Thread. . private final MyRectangle greenRectangle;, если вам нужно медленно перемещать зеленый прямоугольник.

И, возможно, вам нужно позвонить makeVisible() перед медленным движением, иначе вы не увидите его во время его перемещения.

EDIT: Непроверенный полный код:

public class PLFlag { 
private final MyRectangle greenRectangle; 
private MyRectangle whiteRectangle; 
private MyRectangle blackRectangle; 
private final MyRectangle frame; 
private MyRectangle mast; 
private final Triangle redTriangle; 


/** 
    * Constructor for objects of class PLFlag 
    */ 
public PLFlag() { 
    // nothing to do... instance variables are automatically set to null 
} 

/** 
    * Draw this PLFlag. 
    */ 
public void draw() { 
    mast = new MyRectangle(); 
    mast.changeSize(400, 5); 
    mast.changeColor("black"); 
    mast.moveVertical(-100); 
    mast.moveHorizontal(-55); 
    mast.makeVisible(); 

    frame = new MyRectangle(); 
    frame.changeColor("black"); 
    frame.changeSize(122, 180); 
    frame.makeVisible(); 
    new Thread() { 
    public void run() { 
    frame.slowMoveHorizontal(-50); 
    } 
    }.start(); 
    frame.moveVertical(-100); 

    greenRectangle = new MyRectangle(); 
    greenRectangle.changeColor("green"); 
    greenRectangle.changeSize(40, 179); 
    greenRectangle.moveHorizontal(-50); 
    greenRectangle.makeVisible(); 
    new Thread() { 
    public void run() { 
    greenRectangle.slowMoveVertical(-19); 
    } 
    }.start(); 

    whiteRectangle = new MyRectangle(); 
    whiteRectangle.changeColor("white"); 
    whiteRectangle.changeSize(40, 179); 
    whiteRectangle.moveVertical(-59); 
    whiteRectangle.moveHorizontal(-50); 
    whiteRectangle.makeVisible(); 

    redTriangle = new Triangle(); 
    redTriangle.changeSize(-90, -120); 
    redTriangle.changeColor("red"); 
    redTriangle.makeVisible(); 
    new Thread() { 
    public void run() { 
    redTriangle.slowMoveHorizontal(210); 
    } 
    }.start(); 
    new Thread() { 
    public void run() { 
    redTriangle.slowMoveVertical(-130); 
    } 
    }.start(); 
} 
} 
+0

Я не знаю, что означает u в методе slowMove –

+0

Я имею в виду это, например: 'frame.slowMoveHorizontal (-50);' –

+0

да, но я хочу переместить его не один за другим –