我是java和JavaFX Scene Builder的新手。从Scene builder和Java中找到如何链接/编码表单的教程非常困难。所以我最终得到了一个问题。
我有一个包含2列的可观察列表。 A列给出了整数作为字符串列B另一个整数作为字符串 - 我现在如何计算C列(A-B)?
到目前为止我设置了以下代码:
主要控制器类
public class MainController implements Initializable {
// Define table
@FXML
TableView<Table> tableID;
@FXML
TableColumn<Table, Integer> iA;
@FXML
TableColumn<Table, Integer> iB;
@FXML
TableColumn<Table, Integer> iC;
// Define Form
@FXML
TextField AInput;
@FXML
TextField BInput;
@FXML
Button submit;
// Define variables
// create table data
final ObservableList<Table> data = FXCollections.observableArrayList(
);
@Override
public void initialize(URL location, ResourceBundle resources) {
iC.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rC"));
iA.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rA"));
iB.setCellValueFactory(new PropertyValueFactory<Table, Integer>("rB"));
tableID.setItems(data);
}
public void onAddItem(ActionEvent event) {
Table entry = new Table(Integer.parseInt
(AInput.getText()), Integer.parseInt
(BInput.getText()));
// insert data in table
data.add(entry);
}
}
}
表类
public class Table {
private final SimpleIntegerProperty rA;
private final SimpleIntegerProperty rB;
public Table(Integer sA, Integer sB) {
this.rA = new SimpleIntegerProperty(sA);
this.rB = new SimpleIntegerProperty(sB);
}
public Integer getRA() {
return rA.get();
}
public void setRA(Integer v) {
rA.set(v);
}
public Integer getRB() {
return rB.get();
}
public void setRB(Integer v) {
rB.set(v);
}
}
我需要为c设置另一个设置模式,我计算rA - rB吗?
答案 0 :(得分:0)
只需在您的Table
类中添加一个getter方法,即可返回用于其他列的值之间的差异。
public Integer getRC() { return getRA() - getRB(); }
可执行样本
import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.collections.F*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class SubtractingTable extends Application {
public static class Table {
private final SimpleIntegerProperty rA;
private final SimpleIntegerProperty rB;
public Table(Integer sA, Integer sB) {
this.rA = new SimpleIntegerProperty(sA);
this.rB = new SimpleIntegerProperty(sB);
}
public Integer getRA() {
return rA.get();
}
public void setRA(Integer v) {
rA.set(v);
}
public Integer getRB() {
return rB.get();
}
public void setRB(Integer v) {
rB.set(v);
}
public Integer getRC() { return getRA() - getRB(); }
}
@Override
public void start(Stage stage) {
TableView<Table> tableID = new TableView<>();
TableColumn<Table, Integer> iC = new TableColumn<>("A - B");
iC.setCellValueFactory(new PropertyValueFactory<>("rC"));
iC.setStyle("-fx-alignment: baseline_right;");
TableColumn<Table, Integer> iA = new TableColumn<>("A");
iA.setCellValueFactory(new PropertyValueFactory<>("rA"));
iA.setStyle("-fx-alignment: baseline_right;");
TableColumn<Table, Integer> iB = new TableColumn<>("B");
iB.setCellValueFactory(new PropertyValueFactory<>("rB"));
iB.setStyle("-fx-alignment: baseline_right;");
tableID.getColumns().addAll(iA, iB, iC);
tableID.setItems(data);
tableID.setPrefSize(150, 125);
stage.setScene(new Scene(tableID));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
final ObservableList<Table> data = FXCollections.observableArrayList(
new Table(5, 3),
new Table(7, 4),
new Table(9, 3)
);
}