无法使用 ControlsFX 创建可清除的文本字段
Can not create clearable textField using ControlsFX
我使用 Scene Builder
创建了 TextField
,但是当我尝试使用 KeyEvent
时,它不起作用。
public class FXMLDocumentController implements Initializable {
@FXML
private TextField searchPatient;
@FXML
void keyTyped(KeyEvent event) {
this.searchPatient = TextFields.createClearableTextField();
}
}
这里是主要的class:
public class MyFX extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这里是FXMLDocument.fxml:
<AnchorPane id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController">
<children>
<TextField fx:id="searchPatient" layoutX="14.0" layoutY="109.0" onKeyTyped="#keyTyped" prefHeight="26.0" prefWidth="372.0" promptText="Search" />
</children>
</AnchorPane>
我不想依赖代码进行设计,这就是为什么我想使用 ControlsFX
和 IDE 生成的代码。
I'm expecting textfield
must show clear icon as I enter few text in a textfield
that's called clearableTextFieldf
.
但是上面的所有代码并没有像我预期的那样工作。
It does not create ClearableTextField
您正在场景中放置的常规 TextField
的 KEY_TYPED
事件处理程序中创建 TextField
。但是,新创建的 TextField
从未添加到任何场景。
您可以使用 fx:factory
属性来使用 static
方法来创建 FXMLLoader
添加到场景的 TextField
:
...
<?import org.controlsfx.control.textfield.TextFields?>
<AnchorPane id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController">
<children>
<TextFields fx:factory="createClearableTextField" fx:id="searchPatient" layoutX="14.0" layoutY="109.0" prefHeight="26.0" prefWidth="372.0" promptText="Search" />
</children>
</AnchorPane>
您也可以使用 initialize
方法来创建和添加您的 TextField
:
public class FXMLDocumentController implements Initializable {
...
@FXML
private AnchorPane anchorPane;
@Override
public void initialize(URL location, Resources resources)
searchPatient = TextFields.createClearableTextField();
searchPatient.setLayoutX(14.0);
searchPatient.setLayoutY(109.0);
searchPatient.setPrefSize(372.0, 26.0);
searchPatient.setPromptText("Search");
anchorPane.getChildren().add(searchPatient);
...
}
}
<AnchorPane fx:id="anchorPane" id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController" />
我使用 Scene Builder
创建了 TextField
,但是当我尝试使用 KeyEvent
时,它不起作用。
public class FXMLDocumentController implements Initializable {
@FXML
private TextField searchPatient;
@FXML
void keyTyped(KeyEvent event) {
this.searchPatient = TextFields.createClearableTextField();
}
}
这里是主要的class:
public class MyFX extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
这里是FXMLDocument.fxml:
<AnchorPane id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController">
<children>
<TextField fx:id="searchPatient" layoutX="14.0" layoutY="109.0" onKeyTyped="#keyTyped" prefHeight="26.0" prefWidth="372.0" promptText="Search" />
</children>
</AnchorPane>
我不想依赖代码进行设计,这就是为什么我想使用 ControlsFX
和 IDE 生成的代码。
I'm expecting
textfield
must show clear icon as I enter few text in atextfield
that's calledclearableTextFieldf
.
但是上面的所有代码并没有像我预期的那样工作。
It does not create
ClearableTextField
您正在场景中放置的常规 TextField
的 KEY_TYPED
事件处理程序中创建 TextField
。但是,新创建的 TextField
从未添加到任何场景。
您可以使用 fx:factory
属性来使用 static
方法来创建 FXMLLoader
添加到场景的 TextField
:
...
<?import org.controlsfx.control.textfield.TextFields?>
<AnchorPane id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController">
<children>
<TextFields fx:factory="createClearableTextField" fx:id="searchPatient" layoutX="14.0" layoutY="109.0" prefHeight="26.0" prefWidth="372.0" promptText="Search" />
</children>
</AnchorPane>
您也可以使用 initialize
方法来创建和添加您的 TextField
:
public class FXMLDocumentController implements Initializable {
...
@FXML
private AnchorPane anchorPane;
@Override
public void initialize(URL location, Resources resources)
searchPatient = TextFields.createClearableTextField();
searchPatient.setLayoutX(14.0);
searchPatient.setLayoutY(109.0);
searchPatient.setPrefSize(372.0, 26.0);
searchPatient.setPromptText("Search");
anchorPane.getChildren().add(searchPatient);
...
}
}
<AnchorPane fx:id="anchorPane" id="AnchorPane" prefHeight="597.0" prefWidth="726.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.homeo.home.FXMLDocumentController" />