1. ホーム
  2. javafx

[解決済み] javafxでsetOnActionイベントを使用する方法

2022-02-15 18:48:36

質問

javafxを使って、テキストフィールドが空かどうかを検証したいのですが。

イベントハンドラで迷っています。確認したいことがあります。 - setOnActionを使用する多くの方法があるかどうか。

submit.setOnAction((new EventHandler<MouseEvent>() { 
     public void handle(MouseEvent event) { 
        System.out.println("Hello World"); 
     } 
    }));

または

submit.setOnAction(e -> handle(e));

この2つの選択肢の違いは何でしょうか?

  • 2番目の選択肢は、ActionEventを使用することができないかどうか submit.setOnAction(e -> handle()); とありますが、それではeを定義する目的は何なのでしょうか?

アプリケーションでテキストフィールドのバリデーションを行いたいのですが、どうすればよいですか?

public class AppGUI extends Application{

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


public void start(Stage topView)
{
    createUI(topView);
}

private void createUI(Stage topView)
{
    TextField name = TextField();
    Button submit = new Button("Submit");
    submit.setOnAction(e -> validate());
}
private boolean validate()
{
   // if textfield is empty, return false. else, return true. 
}

ここで迷っています。setOnActionのeはvalidateで使わなくても問題ないでしょうか?textfieldの値をvalidate()に渡すにはどうしたらいいでしょうか?textfieldをプライベート変数にするのが唯一の方法でしょうか?(テキストフィールドがたくさんあるので、それが良いオプションかどうか疑問です)。 createUIメソッドで、validate()がfalseを返したら、エラーメッセージを表示し、trueなら、他のことをする、というのはどうすればいいのでしょうか? ありがとうございます、そしてお忙しいところすみません。

解決方法は?

<ブロッククオート

この2つの選択肢の違いは何でしょうか?

2番目の選択肢の場合 ラムダ を使用します (Java 8 から登場)

<ブロッククオート

しかし、それではeを定義する目的は何なのでしょうか?

ボタンの場合、あなたのメソッドは次のようなシグネチャを持ちます。 setOnAction(EventHandler<ActionEvent> handler) と表示されるはずです。 イベントハンドラー・チュートリアル ActionEvent javadoc . 例えば、e からは、イベントが最初に発生したオブジェクトを次のようにして取得することができます。 e.getSource()

validateでeを使わなくても大丈夫です。

テキストフィールドの値を渡すには、次のようなシグネチャを持つメソッドが必要です。

boolean validate(String text);

コード例です。

private void createUI(Stage topView){
  TextField name = TextField();
  Button submit = new Button("Submit");

  submit.setOnAction(e -> {
      boolean validated = validate(name.getText());
      if(validated) System.out.println("validated"); 
  }
}

private boolean validate(String text){
  return text != null && !text.isEmpty();
}