2015-04-15 48 views
0

现在我所得到的都是点,但没有连接它们的线...... 我应该重新创建在切换之前初始化的原始“线”吗?或者我应该不是要创建新的线条,而是重新修改原始线条?需要帮助绘制使用箭头键的线段

public class DrawLineWithArrowKeys extends Application { 
    double bX = 150; 
    double bY = 150; 
    double eX = 150; 
    double eY = 150; 
    double segment = 20; 
@Override 
public void start(Stage primaryStage) { 
Pane myPane = new Pane(); 

Line line = new Line(bX,bY,eX,eY); 
line.setStrokeWidth(2); 
line.setStroke(Color.RED); 
myPane.getChildren().add(line); 

line.setOnKeyPressed(e -> { 
if (e.getCode().isArrowKey()) 
{ 
    switch (e.getCode()) { 

    case DOWN: 
     bY += segment; 
     eY = bY; 
     Line line2 = new Line(bX,bY,eX,eY); 
     line2.setStrokeWidth(2); 
     line2.setStroke(Color.GREEN); 
     myPane.getChildren().add(line2); 
     break; 

    case UP: 
     bY -= segment; 
     eY = bY; 
     Line line3 = new Line(bX,bY,eX,eY); 
     line3.setStrokeWidth(2); 
     line3.setStroke(Color.GREEN); 
     myPane.getChildren().add(line3); 
     break; 

    case LEFT: 
     bX -= segment; 
     eX = bX; 
     Line line4 = new Line(bX,bY, eX, eY); 
     line4.setStrokeWidth(2); 
     line4.setStroke(Color.GREEN); 
     myPane.getChildren().add(line4); 
     break; 

    case RIGHT: 
     bX += segment; 
     eX = bX; 
     Line line5 = new Line(bX,bY,eX,eY); 
     line5.setStrokeWidth(2); 
     line5.setStroke(Color.GREEN); 
     myPane.getChildren().add(line5); 
     break; 

     default: 



     break; 
    } 
} 
}); 


Scene scene = new Scene(myPane, 300, 300); 
primaryStage.setTitle("Draw Line with Arrow Keys"); 
primaryStage.setScene(scene); 
primaryStage.show(); 
line.requestFocus(); 

}

+0

@Uluk BIY,上述修改后的代码。 – FlyingFinger1125

回答

1

我终于明白了,谢谢你不只是把答案交给我,而是我最终通过你的代码并分解它,看看它是如何工作的......结果,我能够拿出一个解决作业...

package skowronek15; 

import javafx.application.Application; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Line; 



public class DrawLineWithArrowKeys extends Application { 
double bX = 150; //start x value denote for beginning-X 
double bY = 150; //start y value denote for beginning-y 
double eX = 150; //start x value denote for end-x 
double eY = 150; //start y value denote for end-y 
double bX2, bY2; //start of next line 
double segment = 20; //length of segment 


@Override 
public void start(Stage primaryStage) { 
    Pane myPane = new Pane(); //create a pane 


    Line line = new Line(bX,bY,eX,eY); //create the starting or initial line 
    line.setStrokeWidth(2); //set width 
    line.setStroke(Color.RED); //set color 
    myPane.getChildren().add(line); //add line to pane 

    line.setOnKeyPressed(e -> { //switch statement to determine what happens when 
           // each key is pressed 
    if (e.getCode().isArrowKey()) 
    { 
     switch (e.getCode()) { 

     case DOWN: 
      bY2 = bY ; //start of next line, bY2 is equal to the start of originating 
         // y-coordinate bY 
      bY += segment;//increment start of first line 
      eY = bY; // end y (eY) coordinate equal to beginning y coordinate (bY) after 
        // it's incremented; 


      Line line2 = new Line(bX,bY2,eX,eY); //create a new line to be drawn; 
           //beginning y coordinate is now bY2; 
      line2.setStrokeWidth(2); 
      line2.setStroke(Color.GREEN); 
      myPane.getChildren().add(line2); 
      break; 

     case UP: 
      bY2 = bY; 
      bY -= segment; 
      eY = bY; 

      Line line3 = new Line(bX,bY2,eX,eY); 
      line3.setStrokeWidth(2); 
      line3.setStroke(Color.GREEN); 
      myPane.getChildren().add(line3); 
      break; 

     case LEFT: 
      bX2 = bX; 
      bX -= segment; 
      eX = bX; 

      Line line4 = new Line(bX2,bY, eX, eY); 
      line4.setStrokeWidth(2); 
      line4.setStroke(Color.GREEN); 
      myPane.getChildren().add(line4); 
      break; 

     case RIGHT: 
      bX2 = bX; 
      bX += segment; 
      eX = bX; 
      Line line5 = new Line(bX2,bY,eX,eY); 
      line5.setStrokeWidth(2); 
      line5.setStroke(Color.GREEN); 
      myPane.getChildren().add(line5); 
      line5.getStrokeLineJoin(); 
      break; 

      default: 


      break; 
     } 
    } 
    }); 


    Scene scene = new Scene(myPane, 300, 300); 
    primaryStage.setTitle("Draw Line with Arrow Keys"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
    line.requestFocus(); 



} 






public static void main(String[] args) { 
    launch(args); 
} 

}

1

您可以使用PathPathElement S:

private int bX = 75, bY = 75; 
private int step = 20; 


@Override 
public void start(Stage primaryStage) 
{ 

    Pane myPane = new Pane(); 
    Path path = new Path(new MoveTo(bX, bY)); // move to starting point 
    path.setStrokeWidth(1); 
    path.setStroke(Color.GREEN); 

    myPane.getChildren().add(path); 

    path.setOnKeyPressed(e -> 
    { 
     if (e.getCode().isArrowKey()) 
     { 
      switch (e.getCode()) 
      { 
       case DOWN: 
        bY += step; 
        break; 

       case UP: 
        bY -= step; 
        break; 

       case LEFT: 
        bX -= step; 
        break; 

       case RIGHT: 
        bX += step; 
        break; 
      } 
      path.getElements().add(new LineTo(bX, bY)); 
     } 
    }); 

    Scene scene = new Scene(myPane, 150, 150); 
    primaryStage.setTitle("Draw Line with Arrow Keys"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
    path.requestFocus(); 
} 

我不是这样的问题功课提供现成代码的粉丝。但至少似乎你已经试图实施。

+0

是的,谢谢你。我在书中查找了Path课,并阅读了它。关于任务的唯一提示是在每种情况下或每个键被击中时产生“新线”。我有点困惑。有人建议使用多段线并将这些点存储在一个列表中,然后使用一个循环来迭代,但这意味着您将有一组关闭线被绘制。在swing中,你只需要调用repaint()方法。在这里,您正在绘制基于开始x和开始y坐标的同一行。 – FlyingFinger1125

+0

@ FlyingFinger1125,此代码可以很容易地转换为“新的Line()”版本。 –

+0

我对代码进行了一些修改,但是,我只点击了点,而不是连接点的线,因为我点击了箭头键。我差不多完成了,但看起来我忽略了一些东西...... – FlyingFinger1125