如何从 javafx 中的事件侦听器访问对象

How to access objects from event listener in javafx

我有一个对象 Contract,其中包含另一个对象 ContractDetails 的摘要和可观察列表。

现在,我正在使用 ContractDetails 从 Contract 对象填充到表视图中。

我有一个保存按钮,单击该按钮需要保存合同以及合同详细信息。我可以访问 ContractDetails,因为它们在 tableview 中。

如何在保存按钮的事件监听器中访问合同属性。

相关代码如下

    public class Contract {

    private String tradeDate;
    private String contractNote;
    .....
    .....
    private String brokerId;  
    private ObservableList<ContractDetails> contractdetails = FXCollections.observableArrayList();
    public Contract() {
        }
    public Contract(String tradeDate, String contractNote, ....., String brokerId,ObservableList<ContractDetails> contractdetails) {

            this.tradeDate = tradeDate;
            this.contractNote = contractNote;
            ....
            ....
            this.contractdetails=contractdetails;
            }    

    public String getTradeDate() {
        return tradeDate;
    }

    public void setTradeDate(String tradeDate) {
        this.tradeDate = tradeDate;
     }

    public String getContractNote() {
        return contractNote;
    }

    public void setContractNote(String contractNote) {
        this.contractNote = contractNote;
     }

    ....
    ....

    public ObservableList<ContractDetails> getContractdetails() {
        return contractdetails;
    }

    public void setContractdetails(ObservableList<ContractDetails> contractdetails) {
        this.contractdetails = contractdetails;
    }

    }


    public class ContractDetails  {

    private String orderNo;
    private String contractType;
    private String symbol;
    private String buysell;
    private Integer quantity;
    private Double buysellprice;
    private Double netcontractValue;

       public ContractDetails() {
    }


      public ContractDetails(String orderNo, String contractType, String symbol, String buysell, Integer quantity, Double buysellprice, Double netcontractValue) {

        this.orderNo = orderNo;
        this.symbol = symbol;
        this.buysell = buysell;
        this.quantity = quantity;
        this.buysellprice = buysellprice;
        this.netcontractValue = netcontractValue;
    }
    public String getOrderNo() {
        return orderNo;
    }
    public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

    ....
    ....

    public Double getNetcontractValue() {
        return netcontractValue;
    }
    public void setNetcontractValue(Double netcontractValue) {
        this.netcontractValue = netcontractValue;
    }
        }

In the controller
================== 
    public class ContractViewController implements Initializable {
    @FXML
    private TableView<ContractDetails> tblcontractfx;
    @FXML
    private TableColumn<ContractDetails, String> contractTypefx;
    @FXML
    private TableColumn<ContractDetails, String> symbolfx;
    ....
    ....
    @FXML
    private Button savefx;
    @FXML
    private TextField txtclientcodefx;
    @FXML
    private TextField txttradedtfx;


    private void fetchContracts(TableView tableView, Contract contract)

    {           txttradedtfx.setText(contract.getTradeDate());
                txtclientcodefx.setText(contract.getClientCode());

                 symbolfx.setCellValueFactory(new PropertyValueFactory<ContractDetails, String>("symbol"));
        contractTypefx.setCellValueFactory(new PropertyValueFactory<ContractDetails, String>("contractType"));

    tableView.setItems((ObservableList) contract.getContractdetails());

    @FXML
    private void saveClicked(ActionEvent event) {  DBConnection DBcon = new DBConnection();
    //Now I am getting the contract details from tableview tblcontractfx
    ObservableList<ContractDetails> contractdetails = tblcontractfx.getItems();
    //How do I get the summary values from contract. I am able to get those which are in text fields like txttradedtfx and txtclientcodefx.However contractNote which I am not using, I still need to retrieve it to populate into database.

      String clientCode=txtclientcodefx.getText();

谢谢

只需将合约存储在局部变量中即可。

Contract contract;
private void fetchContracts(TableView tableView, Contract contract)
{  
this.contract = contract;
...
}


private void saveClicked(ActionEvent event) {  
// here you have full access to the contract variable
String contractNote = contract.getContractNote();
}

作为替代方案,如果您坚持将所有内容合并为一个 table,您可以通过 setUserData and retrieve it via getUserData.

将合同放入 table

顺便说一句,我还是没收到你的密码。为什么你有 TableView<ContractDetails> tblcontractfx

的完全访问权限时还有 tableView 参数