将计算列添加到可观察列表

时间:2014-06-09 10:23:44

标签: java scenebuilder observablelist

我是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吗?

1 个答案:

答案 0 :(得分:0)

只需在您的Table类中添加一个getter方法,即可返回用于其他列的值之间的差异。

public Integer getRC() { return getRA() - getRB(); }

subtraction table

可执行样本

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)
    );
}