私はちょうどJava Fxを学び始めています。 私はオブジェクトでいっぱいのコンボボックスを持っています。私はtoString()メソッドを扱いました。私は画面上に表示したい名前を見ることができます。しかし、今私はそれを編集可能にしたい、そのユーザーは独自のテキストを入力し、ComboBoxは新しいオブジェクトを作成し、そのテキストを正しいフィールドに入れます。私はその問題がコンバータFromStringまたはToStringにあることを知っていますが、私はそれを処理することはできません。オブジェクトを持つJava fx編集可能なコンボボックス
package mnet;
import javafx.application.Application;
import javafx.scene.control.ComboBox;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public class sample extends Application {
Stage window;
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
window = primaryStage;
window.setTitle("Sample");
GridPane grid = new GridPane();
User usr1 = new User("Witold", "ciastko");
User usr2 = new User("Michał", "styk");
User usr3 = new User("Maciej", "masloo");
ComboBox<User> combo1 = new ComboBox<User>();
combo1.getItems().addAll(usr1, usr2, usr3);
combo1.setConverter(new StringConverter<User>() {
@Override
public String toString(User usr) {
return usr.getName();
}
@Override
public User fromString(String s) {
User usr = new User(s, "haslo");
combo1.getItems().add(usr);
return usr;
}
});
combo1.setEditable(true);
combo1.valueProperty().addListener((v, oldValue, newValue) -> {
System.out.println(newValue);
});
GridPane.setConstraints(combo1, 2, 1);
grid.getChildren().addAll(combo1);
Scene scene = new Scene(grid, 400, 200);
window.setScene(scene);
window.show();
}
}
package mnet;
public class User {
String user;
String password;
public User() {
this.user="";
this.password="";
}
public User(String user, String password){
this.user=user;
this.password=password;
}
public String getName(){
return this.user;
}
}
私はStringConverterを取り除く場合、それは正常に動作しますが、代わりにユーザーの名前の私は、この「[email protected]」
EDITのようなオブジェクトのアドレスを参照してください。適切な作業コードを追加しました
ポスト[mcve]。あなたが投稿したプログラムは、あなたが記述したものを再現しません(そして、コンパイルエラーがあります)。 – user1803551
あなたのコードを実行すると、 'return usr.getName();'でNPEを取得します。 – user1803551