gpt4 book ai didi

combobox - JavaFX 可编辑组合框 : Showing toString on item selection

转载 作者:行者123 更新时间:2023-12-04 02:40:49 26 4
gpt4 key购买 nike

我有一个 ComboBox<Person> , 类型 Person ,其中我添加了 Person 的几个对象类。
我用过 setCellFactory(Callback)显示方法 Person姓名在ComboBox下拉

combobox.setCellFactory(
new Callback<ListView<Person >, ListCell<Person >>() {
@Override
public ListCell<Person > call(ListView<Person > p) {
ListCell cell = new ListCell<Person >() {
@Override
protected void updateItem(Person item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText("");
} else {
setText(item.getName());
}
}
};
return cell;
}
});
而且, setButtonCell(ListCell)combobox 中显示名称的方法在选择上。
combobox.setButtonCell(
new ListCell<Object>() {
@Override
protected void updateItem(Person t, boolean bln) {
super.updateItem(t, bln);
if (bln) {
setText("");
} else {
setText(t.getName());
}
}
});
这在正常情况下非常有效,但是当我使用可编辑 combobox 时那么这失败了。
当我写信时, combobox.setEditable(true);然后在项目选择 combobox 的文本字段(编辑器)显示 toString() Person的方法类。
正常情况:
Normal Case
可编辑案例:
Editable Case
有什么解决办法吗?
我有一个模型类:
public class Person {
String name;
int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Person{" + "name=" + name + ", age=" + age + '}';
}
}

最佳答案

您需要设置一个 StringConverter为此目的在 ComboBox 上(没有其他方法,查看 ComboBox 的源代码)

下面是一个例子:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;

import java.util.Arrays;
import java.util.List;

public class ComboBoxTest extends Application {
private ComboBox<Integer> cmb_year = new ComboBox<>();

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

@Override
public void start(Stage primaryStage) throws Exception {
Group root = new Group();
root.getChildren().add(cmb_year);
cmb_year.setPrefWidth(150);
Scene scene = new Scene(root, 500, 500);
primaryStage.setScene(scene);
primaryStage.show();

List<Integer> ints = Arrays.asList(2012, 2013, 2014, 2015);
cmb_year.getItems().addAll(ints);

cmb_year.setConverter(
new StringConverter<Integer>() {
@Override
public String toString(Integer integer) {
if (integer == null) {
return "";
} else {
return "that's a year: " + integer.intValue();
}
}

@Override
public Integer fromString(String s) {
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
return null;
}
}
});

cmb_year.setPromptText("select year");
cmb_year.setEditable(true);

Button distraction = new Button("distraction");
distraction.setLayoutX(100);
distraction.setLayoutY(100);
root.getChildren().add(distraction);
}
}

结果:

enter image description here
enter image description here

关于combobox - JavaFX 可编辑组合框 : Showing toString on item selection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19242747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com