我有一个我正在创建的登录表单,我希望TextField
ActionEvent
也可以在Button
中使用,但我不知道该怎么做。在Swing中,我已经看到它可以回收ActionEvent
并在TextField
之类的其他地方使用它,但我不知道如何在JavaFX中执行此操作。
以下是我的TextField
代码ActionEvent
我也想将它应用于我的Button
所以我不必创建另一个方法,只有相同的功能但不同的组件。感谢
passField.setOnKeyPressed(new EventHandler<KeyEvent>()
{
@Override
public void handle(KeyEvent e)
{
if(e.getCode().equals(KeyCode.ENTER))
{
if(admin.equals(userField.getText()) && password.equals(passField.getText()))
{
textInfo.setText("WELCOME " + passField.getText());
textInfo.setTextFill(Color.BLACK);
}
else
{
userField.clear();
passField.clear();
textInfo.setText("Incorrect username or password");
textInfo.setTextFill(Color.RED);
}
}
}
});
答案 0 :(得分:1)
您必须找到Event
和Button
支持的共享TextField
。
在您的示例中,您附加了KeyEvent
监视ENTER
密钥的处理程序,该密钥等同于ActionEvent
。幸运的是,Button
也支持它。
创建共享EventHandler
:
final EventHandler<ActionEvent> myHandler = e -> {
if(admin.equals(userField.getText()) && password.equals(passField.getText())) {
textInfo.setText("WELCOME " + passField.getText());
textInfo.setTextFill(Color.BLACK);
}
else {
userField.clear();
passField.clear();
textInfo.setText("Incorrect username or password");
textInfo.setTextFill(Color.RED);
}
}
您现在可以连接两次(甚至更频繁):
button.setOnAction(myHandler);
passField.setOnAction(myHandler);
修改
没有lambda表达式:
final EventHandler<ActionEvent> myHandler = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e)
{
if(admin.equals(userField.getText()) && password.equals(passField.getText())) {
textInfo.setText("WELCOME " + passField.getText());
textInfo.setTextFill(Color.BLACK);
}
else {
userField.clear();
passField.clear();
textInfo.setText("Incorrect username or password");
textInfo.setTextFill(Color.RED);
}
}
});