无法清除用户在javafx

时间:2018-09-06 16:26:09

标签: java user-interface javafx

我正在创建一个小的JavaFX应用程序,其中包含一个textField和一个Listview。在文本字段中输入的文本将添加到列表视图中,以便以后处理。这个小应用程序将在以后添加到更大的UI应用程序中。我的问题是我有一个FXML文件,该文件将事件调度到适当的处理程序方法,而这样的方法textEntryKeyPressed()处理关键事件。它以字符串存储/记录用户输入的数据,然后将其添加到ObservableList中,然后反映到列表视图中。在textEntryKeyPressed()中,我希望这样,当按下Enter键时,将从文本字段中清除显示器上文本字段中所有用户输入的数据,并将其提交到列表视图中。我尝试使用clear()类的TextField方法,但此方法无效。看来这应该是非常基本的,但是我似乎无法使它清除屏幕上的文本。此小型应用程序的所有三个文件将显示在下面。在类之间是fxml文件。

package sample;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;

import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;

import java.util.logging.Logger;

public class Controller {

    @FXML
    static TextField hl7CriteriaEntry = new TextField();

    private static String entry = "";

    private static final Logger logger = Logger.getLogger("Controller");

    @FXML
    private static ListView<String>displayCriteria = new ListView<>();

    static ObservableList<String> criteriaList = FXCollections.observableArrayList();

    /*
        Listens for text entry into the hl7 criteria text field and adds it to the list view upon pressing enter.
     */
    @FXML
    public void textEntryKeyPressed(KeyEvent keyEvent){
        if (keyEvent.getCode() == KeyCode.ENTER){
            hl7CriteriaEntry.setText(entry);
            criteriaList.add(entry); //add HL7 criteria to the criteria list
            displayCriteria.getItems().clear();
            displayCriteria.setItems(criteriaList);
            logger.info("text: "+hl7CriteriaEntry.getText());
            logger.info("items: "+hl7CriteriaEntry.getText());
            hl7CriteriaEntry.deletePreviousChar();
        }
        else{
            entry+=keyEvent.getText();
            System.out.println(entry);
        }
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.Pane?>

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <TextField  fx:id="hl7CriteriaEntry" layoutX="14.0" layoutY="200.0" onKeyPressed="#textEntryKeyPressed" promptText="Enter HL7 Criteria Here" />
      <ListView fx:id="displayCriteria" editable="true" layoutX="292.0" layoutY="126.0" prefHeight="200.0" prefWidth="259.0" style="-fx-border-color: blue;" />
   </children>
</Pane>
package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.cell.TextFieldListCell;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setScene(new Scene(root, 300, 275));
        //ListView initial settings;
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

0 个答案:

没有答案