У меня есть вопрос, который я никак не могу решить.Я прочитал все, что нашел в Интернете, и перепробовал десятки кодов, но у меня все еще нет решения.
Это проект JavaFX, который следует модели MVC.Файл fxml имеет следующий вид:
Основной класс:
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
AnchorPane root = null;
try {
root = (AnchorPane) FXMLLoader.load(getClass().getResource("sample.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}
Контроллер для файла fxml:
public class Controller {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private TableView<Fila> taula;
@FXML
private TableColumn<Fila, String> c1;
@FXML
private TableColumn<Fila, ObservableList<String>> c2;
@FXML
void initialize() {
assert taula != null : "fx:id=\"taula\" was not injected: check your FXML file 'sample.fxml'.";
assert c1 != null : "fx:id=\"c1\" was not injected: check your FXML file 'sample.fxml'.";
assert c2 != null : "fx:id=\"c2\" was not injected: check your FXML file 'sample.fxml'.";
ObservableList<Fila> dades = FXCollections.observableArrayList(
new Fila("First", FXCollections.observableArrayList("1", "2", "3")),
new Fila("Second", FXCollections.observableArrayList("4", "5", "6")),
new Fila("Third", FXCollections.observableArrayList("7", "8", "9"))
);
c1.setCellValueFactory(cellData -> cellData.getValue().c1Property());
c2.setCellValueFactory(cellData -> cellData.getValue().c2Property());
taula.setItems(dades);
}
}
И класс компонента:
public class Fila {
private StringProperty c1;
private ListProperty<String> c2;
public Fila(String c1, ObservableList<String> c2) {
this.c1 = new SimpleStringProperty(c1);
this.c2 = new SimpleListProperty<>(c2);
}
public String getC1() {
return c1.get();
}
public StringProperty c1Property() {
return c1;
}
public void setC1(String c1) {
this.c1.set(c1);
}
public ObservableList<String> getC2() {
return c2.get();
}
public ListProperty<String> c2Property() {
return c2;
}
public void setC2(ObservableList<String> c2) {
this.c2.set(c2);
}
}
Чего я не понимаю, так это того, что во втором столбце появляется ComboBox
со значениями, которые теперь отображаются как List
...
Я думаю, что это можетбыть достигнутым с помощью метода setCellFactory
вместе с Callback
для столбца, где мы хотим получить ComboBox
, но я не могу его получить ...
Извините за мой уровень английского языка;Очевидно, что я использую переводчик ...