我有一个场景,在将文本输入文本字段后,javaFX Text对象将填充输入字段中的文本。
这是代码 -
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class TextEntry extends Application
{
private static Text textFX;
public static void main(String [] args)
{
launch(args);
}
public void start(Stage primaryStage)
{
Pane root = new Pane();
TextField enterText = new TextField();
enterText.setFont(Font.font("SanSerif",20));
enterText.textProperty().addListener((obs, oldTextValue, newTextValue) ->
{
textFX = new Text(150,300,newTextValue);
Font Sanserif = Font.font("Phosphate",50);
textFX.setFont(Sanserif);
textFX.setFill(Color.BLUE);
root.getChildren().add(textFX);
});
root.setOnMouseMoved(e ->{
if(textFX.contains(e.getX(),e.getY()))
textFX.setOnMouseDragged(f ->{
textFX.setX(f.getX());
textFX.setY(f.getY());
});
});
root.getChildren().add(enterText);
Scene scene = new Scene(root,600,600);
primaryStage.setScene(scene);
primaryStage.setTitle("Text Entry");
primaryStage.show();
}
}
一些问题 -
侦听器响应正在输入的文本,但不会删除。它与各种侦听器类型 - 失效侦听器和/或删除侦听器有什么关系吗?我是JavaFX的新手(对Java来说比较新!)并且不完全理解它们。
每次将新信件输入文本字段时,都会创建多个文本对象。我只想创建一个新对象并对其进行编辑,我意识到这是因为我要求每次更新值时都要创建一个新的文本对象,但是不能想到解决这个问题的方法吗?
< / LI> 醇>注意:最终我希望能够以不同的字体和大小创建多个文本对象。
对这些问题的任何帮助都将受到大力赞赏!
答案 0 :(得分:0)
只需创建Text
对象并将其添加到屏幕一次,然后在监听器中更新它的文本。
此外,每次鼠标移动时都无需重置拖动侦听器。您只需要注册一次。
public void start(Stage primaryStage)
{
Pane root = new Pane();
TextField enterText = new TextField();
enterText.setFont(Font.font("SanSerif",20));
textFX = new Text(150,300,"");
Font Sanserif = Font.font("Phosphate",50);
textFX.setFont(Sanserif);
textFX.setFill(Color.BLUE);
root.getChildren().add(textFX);
textFX.setOnMouseDragged(e ->{
textFX.setX(e.getX());
textFX.setY(e.getY());
});
root.getChildren().add(enterText);
Scene scene = new Scene(root,600,600);
primaryStage.setScene(scene);
primaryStage.setTitle("Text Entry");
primaryStage.show();
}
此时,您可以使用绑定代替侦听器:
public void start(Stage primaryStage)
{
Pane root = new Pane();
TextField enterText = new TextField();
enterText.setFont(Font.font("SanSerif",20));
textFX = new Text(150,300,"");
Font Sanserif = Font.font("Phosphate",50);
textFX.setFont(Sanserif);
textFX.setFill(Color.BLUE);
root.getChildren().add(textFX);
textFX.textProperty().bind(enterText.textProperty());
textFX.setOnMouseDragged(e ->{
textFX.setX(e.getX());
textFX.setY(e.getY());
});
root.getChildren().add(enterText);
Scene scene = new Scene(root,600,600);
primaryStage.setScene(scene);
primaryStage.setTitle("Text Entry");
primaryStage.show();
}