TextField
の内容の妥当性チェックを実装しようとしています。妥当性を隣のアイコンとして表示しています。しかし、それはイメージを変更するようではありません。ここに私が今までに持っているコードがあります。私は経験している問題に関係のないものはすべて取り除きました。ここで ImageView(JavaFX)でイメージを動的に変更するにはどうすればよいですか?
package mypackage.view;
import mypackage.model.Foo;
// JavaFX imports
public class MyView extends VBox {
private final Foo model;
private final MyPresenter presenter;
HBox tokenValidationbox;
TextField tokentxt;
ImageView isValidimg;
public MyView(Foo model) {
this.model = model;
initFieldData();
layoutForm();
this.presenter = new MyPresenter(model, this);
}
private void initFieldData() {
tokenValidationbox = new HBox();
tokentxt = new TextField();
isValidimg = new ImageView();
}
private void layoutForm() {
tokenValidationbox.getChildren().addAll(tokentxt, isValidimg);
this.getChildren().add(tokenValidationbox);
}
}
そして、これはロジックが含まれているプレゼンタークラスです:
package mypackage.view;
import mypackage.model.Foo;
// JavaFX imports
public class MyPresenter {
private final Foo model;
private final MyView view;
public MyPresenter(Foo model, MyView view) {
this.model = model;
this.view = view;
attachEvents();
}
private void attachEvents() {
view.tokentxt.setOnAction((ActionEvent event) -> {
view.isValidimg.setImage(new Image(validationImage(view.tokentxt.getText())))
});
}
public String validationImage(String token) {
String img = "dialog-error.png";
if(isValid(token)) img = "emblem-default.png";
return getClass().getClassLoader().getResource(img).toExternalForm();
}
private static boolean isValid(String token) {
// snip
}
}
私は、これは何かが変更されるたびに入力されたトークンが有効であるかどうかを確認する必要があります理解したようテキストフィールドに入力し、対応するイメージをロードして表示しますが、イメージは表示されません。
emblem-default.png
とdialog-error.png
プロジェクトリソースフォルダに置かれており、静的にロードすることができます(私はImageView
内Image
コンストラクタを置けば、それを初期化するとき、すなわち、それだけで正常に動作します)
'onAction'ハンドラは' enter'を押すと呼び出されます( 'TextField'で何かが変更された場合は*です)。さらに、毎回新しいイメージを作成/ロードするのではなく、一度にイメージをロードすることをお勧めします。 – fabian
グリーンに変わり、有効と言われるテキストを使用するだけではどうですか? – Sedrick
答える前に完全なシナリオを読む必要があります。ごめんなさい。 – Sedrick