【问题标题】:display user input in pop up window (Java)在弹出窗口中显示用户输入(Java)
【发布时间】:2021-09-26 06:42:18
【问题描述】:

我的程序接受用户输入并将其打印出来。我所做的是从 textFields 中获取文本并将它们放入 toString() 方法,然后将它们打印到弹出框上。我的问题是弹出框上的输出不是我想要的。程序开始吐出放在文本字段中的原始字符串和紧随其后的一堆随机文本(如一堆文本及其位置的规范等)我不确定为什么会发生这种情况,常规字符串或文本工作正常,但为什么检索到的文本会出现这种奇怪的显示?

public class Main extends Application {

    private TextField startDate;
    private Text start;
    private Text end;
    private TextField endDate;
    private Button count;



    @Override
    public void start(Stage primaryStage) {

        start = new Text("Start Date: ");
        end = new Text("End Date: ");

        start.setFont(Font.font("Arial"));
        end.setFont(Font.font("Arial"));

        startDate = new TextField("1/1/2000");
        endDate = new TextField("12/06/2020");

        startDate.setFont(Font.font("Arial"));
        endDate.setFont(Font.font("Arial"));

        count = new Button("Count");
        count.setFont(Font.font("Arial"));

        ButtonEvent ButtonEvent = new ButtonEvent();
        count.setOnAction(ButtonEvent);

        HBox startLine = new HBox(10);
        startLine.getChildren().addAll(start, startDate);
        startLine.setAlignment(Pos.CENTER);


        HBox endLine = new HBox(10);
        endLine.getChildren().addAll(end, endDate);
        endLine.setAlignment(Pos.CENTER);

        HBox button = new HBox();
        button.getChildren().add(count);
        button.setAlignment(Pos.CENTER);


        VBox vbox = new VBox(10);
        vbox.getChildren().addAll(startLine, endLine, button);
        vbox.setAlignment(Pos.CENTER);


        Pane root = new Pane();

        root.getChildren().addAll(vbox);

        Scene scene = new Scene(root, 250, 130);
        primaryStage.setTitle("Date Counter");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private class ButtonEvent implements EventHandler<ActionEvent>{

        private Text startInput;
        private Text endInput;

        @Override
        public void handle(ActionEvent event) {

            startInput = new Text();
            endInput = new Text();

            startInput.setText(startDate.getText());
            String startDateInput = startInput.toString();

            endInput.setText(endDate.getText());
            String endDateInput = endDate.toString();

            Text test1 = new Text(startDateInput);
            test1.setFont(Font.font("Arial"));
            Text test2 = new Text(endDateInput);
            test2.setFont(Font.font("Arial"));

            Stage msg = new Stage();
            msg.initModality(Modality.APPLICATION_MODAL);
            VBox dialogVbox = new VBox(20);

            dialogVbox.getChildren().addAll(test1, test2);

            Scene dialogScene = new Scene(dialogVbox, 300, 200);
            msg.setScene(dialogScene);
            msg.show();
        }
    }

    public static void main(String[] args) {

        Application.launch(args);
    }

}

【问题讨论】:

  • 你能把endDate = new TextField("12/06/2020);改成endDate = new TextField("12/06/2020");吗?
  • @ofek nice catch ;) 已修复

标签: java string input text event-handling


【解决方案1】:

您需要在您的Text 对象上使用getText 方法而不是toString

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/text/Text.html#getText--

【讨论】:

    【解决方案2】:

    我想你想把 toString() 改成 getText():

    代替

    startInput.setText(startDate.getText());
    String startDateInput = startInput.toString();
    
    endInput.setText(endDate.getText());
    String endDateInput = endDate.toString();
    

    startInput.setText(startDate.getText());
    String startDateInput = startInput.getText();
    
    endInput.setText(endDate.getText());
    String endDateInput = endDate.getText();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多