我正在创建一个小的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);
}
}