JavaFX: как исправить нередактируемый TextField? - PullRequest
0 голосов
/ 21 января 2019

Я делаю приложение для списка дел на Java, и есть сцена с двумя текстовыми полями и кнопкой, которая, кажется, работает в режиме предварительного просмотра SceneBuilder (я могу напечатать поля и нажать кнопку), нокогда я запускаю программу, я не могу редактировать текстовые поля в этой сцене.Ранее я успешно создал три другие сцены, и в них я тоже использовал текстовые поля, и они отлично работают, но я не могу понять, почему эта сцена не позволяет мне редактировать текстовые поля.

Вот FXML длянерабочая сцена:

<AnchorPane prefHeight="500.0" prefWidth="800.0" style="-fx-background-color: #4db6ac;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.controller.newTaskController">
    <children>
        <AnchorPane fx:id="rootAnchorPane" layoutY="170.0" prefHeight="330.0" prefWidth="800.0" style="-fx-background-color: #fff8e1;">
         <children>
            <JFXTextField fx:id="taskText" focusColor="#4db6ac" layoutX="188.0" layoutY="55.0" maxWidth="424.0" minWidth="357.0" prefHeight="59.0" prefWidth="424.0" promptText="Task title">
               <font>
                  <Font size="24.0" />
               </font>
            </JFXTextField>
            <JFXTextField fx:id="descriptionText" focusColor="#4db6ac" layoutX="188.0" layoutY="136.0" maxWidth="424.0" minWidth="357.0" prefHeight="59.0" prefWidth="424.0" promptText="Description">
               <font>
                  <Font size="24.0" />
               </font>
            </JFXTextField>
            <JFXButton fx:id="saveTaskButton" layoutX="341.0" layoutY="217.0" prefHeight="52.0" prefWidth="119.0" style="-fx-background-color: #4db6ac;" text="Save" />
         </children>
        </AnchorPane>
        <Label alignment="CENTER" contentDisplay="CENTER" layoutX="204.0" layoutY="34.0" text="To do List">
            <font>
                <Font name="Autumn in November" size="55.0" />
            </font>
        </Label>
    </children>
</AnchorPane>

В SceneBuilder я установил текстовые поля для редактирования так же, как и раньше для других узлов.

А вот контроллер для представления:

package sample.controller;

import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXTextField;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import sample.adatok.AdatHandler;
import sample.model.Task;

import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ResourceBundle;

public class newTaskController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private AnchorPane rootAnchorPane;

    @FXML
    private JFXTextField taskText;

    @FXML
    private JFXTextField descriptionText;

    @FXML
    private JFXButton saveTaskButton;

    @FXML
    void initialize() {

    saveTaskButton.setOnAction(event -> {
        printMessage();
        createTask();
        Parent newUserParent = null;
        try {
            newUserParent = FXMLLoader.load(getClass().getResource("/sample/view/newitem.fxml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        Scene newUserScene = new Scene(newUserParent);

        Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();

        window.setScene(newUserScene);
        window.show();
    });

    }

    private void printMessage() {
        System.out.println("Current user ID: " + this.getId());
    }

    private void createTask() {

        AdatHandler adatHandler = new AdatHandler();

        String tasktext = taskText.getText();
        String descriptiontext = descriptionText.getText();

        LocalDateTime currentDateTime = LocalDateTime.now();

//Build formatter
        DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;

//Format LocalDateTime
        String formattedDateTime = currentDateTime.format(formatter);

        Task task = new Task(tasktext, formattedDateTime, descriptiontext);
        String currentid = this.getId();
        adatHandler.addNewTask(task, currentid);

    }

    private String id;

    public String getId() {
        return id;
    }

    public void initDataT(String currentid) {
        id = currentid;
    }

}
...