Я использовал этот код, чтобы поместить ComboBoxCell в таблицу под названием «ComboTable». Данные первых двух колонок задаются подключением к базе данных ниже этого кода.Получить значение ComboBoxTableCell
ComboTable.setEditable(true);
col1.setCellValueFactory(new PropertyValueFactory<model, String>("rCol1"));
col2.setCellValueFactory(new PropertyValueFactory<model, String>("rCol2"));
col3.setCellValueFactory(new PropertyValueFactory<model, String>("rCol3"));
col3.setCellFactory(ComboBoxTableCell.forTableColumn(cbValues));
// ChangeListener
ComboTable.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
@Override
public void changed (ObservableValue<?> oValue, Object oldValue, Object newValue) {
tableIndexProperty.set(tableData.indexOf(newValue));
tableIndex = (tableData.indexOf(newValue));
System.out.println("Index:\t" + tableIndex);
System.out.println(col3.getCellData(tableIndex));
}});
Так что теперь я хочу получить значение после установки значения в таблице с помощью прослушивателя изменений. Я думал, что этот код дает мне значение после того, как я выбрал значение для comboboxtablecell:
System.out.println(col3.getCellData(tableIndex));
Где моя ошибка в этой части, если моя программа или это неправильный путь, чтобы получить значение?
Кстати, вот выход моей программы:
*** Loaded Oracle-Driver ***
*** Connected with Database ***
Index of Databaserow: 1
Daten1: one Daten2: two
Index of Databaserow: 2
Daten1: tree Daten2: four
*** Database data saved to Observable List named 'data' ***
*** Table Items setted ***
Я нажал на строк таблицы здесь -> ChangeListener:
Index: 1
null
Index: 0
null
Index: 1
null
Index: 0
null
Модель:
package model;
import controller.main_controller.ComboValues;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class model {
private StringProperty rCol1 = new SimpleStringProperty();
private StringProperty rCol2 = new SimpleStringProperty();
private ObjectProperty<ComboValues> rCol3 = new SimpleObjectProperty<>();
public model(String sCol1, String sCol2, ComboValues sCol3) {
setCol1(sCol1);
setCol2(sCol2);
setComboValues(sCol3);
}
public final StringProperty col1Property() {
return this.rCol1;
}
public final String setCol1() {
return this.col1Property().get();
}
public final void setCol1(final String col1) {
this.col1Property().set(col1);
}
public final StringProperty col2Property() {
return this.rCol2;
}
public final String setCol2() {
return this.col2Property().get();
}
public final void setCol2(final String col2) {
this.col1Property().set(col2);
}
public final ObjectProperty<ComboValues> combovaluesProperty() {
return this.rCol3;
}
public final ComboValues getComboValues() {
return this.combovaluesProperty().get();
}
public final void setComboValues(final ComboValues rCol3) {
this.combovaluesProperty().set(rCol3);
}
}
ли вы установить '' cellValueFactory' для col3'? Вы действительно должны просто получить значение от модели; если у вас есть правильная настройка, модель автоматически обновится, когда пользователь совершит редактирование с помощью поля со списком. –
нет, его не входит в модель. Как я могу включить его там? – lukas22497
Просто создайте свойство для него в модели так же, как у вас есть свойства для других столбцов ... Трудно ответить, не зная, что вы пытаетесь сделать здесь. –