【发布时间】:2015-07-07 13:28:43
【问题描述】:
在诊断行为方面寻求帮助,因为我不知道它可能发生在哪里。
在表格编辑时,标签会更新,但值似乎永远不会更新,因为只要表格更新,值就会恢复。这发生在排序中,并且可以通过以下方式证明是正确的:
for(Row r : elementsTable.getItems().get(0))
System.out.println(r.getSymbol() + r.getWeight() + r.getAtom());
界面:
@FXML
private TextField row1;
@FXML
private TextField row2;
@FXML
private TextField row3;
@FXML
private TableView<Row> elementsTable;
private List<Row> row;
private ObservableList<Row> oRow;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
row = new ArrayList();
}
private void addRow(ActionEvent event) {
elementsTable.getItems().add(new Row(
row1.getText(),
row2.getText(),
row3.getText()));
}
public void
construct(List<String> z, List<String> w, List<String> z)
throws Exception{
//populate table rows
for(int i = 0; i < z.size(); i++){
row.add(new Row(z.get(i), w.get(i), a.get(i)));
}
oRow = FXCollections.observableArrayList(row);
elementsTable.setItems(oRow);
}
FXML
<TableView fx:id="elementsTable" editable="true" layoutX="67.0" layoutY="124.0" prefHeight="237.0" prefWidth="523.0">
<columns>
<TableColumn fx:id="elementCol" editable="true" prefWidth="138.0" text="Element">
<cellFactory>
<TextFieldTableCell fx:factory="forTableColumn" />
</cellFactory>
<cellValueFactory>
<PropertyValueFactory property="symbol" />
</cellValueFactory>
</TableColumn>
<TableColumn fx:id="weightCol" editable="true" prefWidth="191.0" text="Weight Fraction">
<cellFactory>
<TextFieldTableCell fx:factory="forTableColumn" />
</cellFactory>
<cellValueFactory>
<PropertyValueFactory property="weight" />
</cellValueFactory>
</TableColumn>
<TableColumn fx:id="atomCol" editable="true" prefWidth="189.0" text="Atom Fraction">
<cellFactory>
<TextFieldTableCell fx:factory="forTableColumn" />
</cellFactory>
<cellValueFactory>
<PropertyValueFactory property="atom" />
</cellValueFactory>
</TableColumn>
</columns>
<items>
<FXCollections fx:factory="observableArrayList">
<Row atom="" symbol="" weight="" />
</FXCollections>
</items>
</TableView>
表模型
public class Row{
private final SimpleStringProperty symbol = new SimpleStringProperty("");
private final SimpleStringProperty weight = new SimpleStringProperty("");
private final SimpleStringProperty atom = new SimpleStringProperty("");
/**
* Default constructor, defaults to empty strings
*/
public Row(){
this("","","");
}
/**
*
* @param s symbol(or ZA)
* @param w weight fraction
* @param a atom fraction (or atom count ending with "#")
*/
public Row(String s, String w, String a){
setSymbol(s);
setWeight(w);
setAtom(a);
}
public String getSymbol(){return symbol.get();}
public String getWeight(){return weight.get();}
public String getAtom(){return atom.get();}
public void setSymbol(String s){symbol.set(s);}
public void setWeight(String w){weight.set(w);}
public void setAtom(String a){atom.set(a);}
}
状态1:在做任何事情之前
状态 2:已编辑单元格
状态 3:向表中添加行,数据还原编辑
【问题讨论】: