在JavaFX中绘制节点
我试图通过创建用户移动的轨迹来跟踪用户的移动。我已经了解了程序的大部分方面,但我一直在研究如何在窗格中保持用户的移动在JavaFX中绘制节点,java,javafx,Java,Javafx,我试图通过创建用户移动的轨迹来跟踪用户的移动。我已经了解了程序的大部分方面,但我一直在研究如何在窗格中保持用户的移动 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.text.Text; import javafx.stage.Stage; public class DrawLines extends Ap
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class DrawLines extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
Text text = new Text(150, 150, ".");
pane.getChildren().add(text);
text.setOnKeyPressed(e -> {
switch (e.getCode()) {
case DOWN: text.setY(text.getY() + 10); break;
case UP: text.setY(text.getY() - 10); break;
case LEFT: text.setX(text.getX() - 10); break;
case RIGHT: text.setX(text.getX() + 10); break;
default:
if (Character.isLetterOrDigit(e.getText().charAt(0)))
text.setText(e.getText());
}
});
// Create a scene and place the pane in the stage
Scene scene = new Scene(pane, 300, 300);
primaryStage.setTitle("Draw a Line!");
primaryStage.setScene(scene);
primaryStage.show();
text.requestFocus();
}
您需要创建一个新的
文本
,并将其添加到每个用户移动的窗格中。只需创建一个新方法来处理这个问题,并为每个用户移动调用它
private void leaveTrail(Pane pane, Text text){
Text newText = new Text(text.getText());
pane.getChildren().add(newText);
newText.setY(text.getY());
newText.setX(text.getX());
}
完整的工作示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class DrawLines extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
Text text = new Text(150, 150, ".");
pane.getChildren().add(text);
text.setOnKeyPressed(e -> {
switch (e.getCode()) {
case DOWN:
leaveTrail(pane, text);
text.setY(text.getY() + 10);
break;
case UP:
leaveTrail(pane, text);
text.setY(text.getY() - 10);
break;
case LEFT:
leaveTrail(pane, text);
text.setX(text.getX() - 10);
break;
case RIGHT:
leaveTrail(pane, text);
text.setX(text.getX() + 10);
break;
default:
if (Character.isLetterOrDigit(e.getText().charAt(0)))
text.setText(e.getText());
}
});
// Create a scene and place the pane in the stage
Scene scene = new Scene(pane, 300, 300);
primaryStage.setTitle("Draw a Line!");
primaryStage.setScene(scene);
primaryStage.show();
text.requestFocus();
}
private void leaveTrail(Pane pane, Text text){
Text newText = new Text(text.getText());
pane.getChildren().add(newText);
newText.setY(text.getY());
newText.setX(text.getX());
}
public static void main(String[] args) {
launch(args);
}
}
样本图像
我不确定我是否理解你的要求。如果您知道边界(x宽度,y宽度),只需将当前位置与每个边界的最大值和最小值进行比较,如果它们超过最大值,则将当前位置重置为当前位置即将超出边界的维度中的最大值。或者,如果这会使它们超出边界,则首先不要移动它们。我想我搞错了。OP是想通过跟踪用户的移动来跟踪
文本
,还是仅仅希望它在窗格的范围内?@ItachiUchiha也许你是对的。这个问题不太清楚,我很抱歉弄糊涂了@ItachiUchiha回答了我的问题。