Рисование узла в JavaFX

1

Я пытаюсь отслеживать движения пользователей, создавая след от того, куда они ушли. У меня есть большинство аспектов программы, но я зациклен на том, как сохранить движения пользователя на панели.

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(); 
  }
  • 0
    Я не уверен, что понимаю, что вы спрашиваете. Если вы знаете границы (x ширина, y ширина), просто сравните текущее местоположение с максимальным и минимальным значениями каждого, и если они превышают максимальное значение, сбросьте текущую позицию на максимальное значение в измерении, из которого собирается выйти текущая позиция. границ.
  • 0
    Или просто не перемещайте их в первую очередь, если это выведет их за пределы.
Показать ещё 3 комментария
Теги:
javafx

1 ответ

1
Лучший ответ

Вам нужно создать новый Text и добавить его в панель для каждого пользовательского движения. Просто создайте новый метод, который позаботится об этом и вызовет его для каждого пользовательского движения.

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);
    }
}

Образец изображения

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню