无法从tableview中检索值

时间:2015-06-08 10:45:08

标签: javafx tableview

我无法从tableview获取正确的输出。我使用按钮将一个项目从tableview设置为标签。但是,它会打印" StringProperty [Value pineapples]"在哪里,我希望它只是"菠萝"。

tableview正确地给出了它们。

public class ProductListController implements Initializable {

@FXML public TableView<Model> tableview ;
@FXML private TableColumn<Model, Number> ProductID;
@FXML private TableColumn<Model, String> ProductName;
@FXML private TableColumn<Model, Number> ProductPrice; 
@FXML private Label lblProduct;
@FXML private Label lblPrice;   

@FXML
private void btnActionShow(ActionEvent event) {

  assert tableview !=null : " ";
         ProductID.setCellValueFactory(cellData -> cellData.getValue().ProductIDProperty());
         ProductName.setCellValueFactory(cellData -> cellData.getValue().ProductNameProperty());
         ProductPrice.setCellValueFactory(cellData -> cellData.getValue().ProductPriceProperty());

            buildData();        
    }

private ObservableList<Model> data;

public void buildData(){
    data = FXCollections.observableArrayList();

    try{
   Connection conn = DriverManager.getConnection
      ("jdbc:derby://localhost:1527/Stock", "*****", "*****");

     Statement stmt = conn.createStatement();
     String SQL = "SELECT * FROM PRODUCTS";
     ResultSet rs = stmt.executeQuery(SQL);

    while (rs.next()) {
      Model mod = new Model();
     mod.ProductID.set(rs.getInt("ID"));
     mod.ProductName.set(rs.getString("NAME"));
     mod.ProductPrice.set(rs.getInt("SELL_PRICE"));


     data.add(mod);
     }
     tableview.setItems(data);

     }
    catch ( SQLException err) {
    System.out.println(err.getMessage() );
    }
   }


//Button to fetch data from Tableview. Sets the data not the way I want.
@FXML
private void btnConfirmAction(ActionEvent event) {
    Model model = tableview.getSelectionModel().getSelectedItem();
    String prd;
    prd = model.getProductName().toString();
    lblProduct.setText(prd);
}


   @FXML
private void btnNextAction(ActionEvent event) {

   try{
     FXMLLoader loader = new FXMLLoader(getClass().getResource("/appl/Discount.fxml"));
       Parent parent = loader.load();
         DiscountController discountcontr = loader.getController();
         discountcontr.setProduct(tableview.getSelectionModel().getSelectedItem().getProductName().toString());

         Stage stage = new Stage();
         Scene scene = new Scene(parent);
         stage.setScene(scene);
         stage.show();

     }
     catch(IOException e){
     }
}


    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }    

}

模型

public class Model {

    public SimpleIntegerProperty ProductID = new SimpleIntegerProperty();
    public SimpleStringProperty ProductName = new SimpleStringProperty ();
    public SimpleIntegerProperty ProductPrice = new SimpleIntegerProperty();
    private final SimpleBooleanProperty Checked = new SimpleBooleanProperty(false);

    public SimpleBooleanProperty checkedProperty() {
        return this.Checked;
    }

    public java.lang.Boolean getChecked() {
        return this.checkedProperty().get();
    }

    public void setChecked(final java.lang.Boolean checked) {
        this.checkedProperty().set(checked);
    }


    public SimpleIntegerProperty getProductID() {
        return ProductID;
    }

    public SimpleStringProperty getProductName() {
        return ProductName;
    }

    public SimpleIntegerProperty getProductPrice() {
        return ProductPrice;
    }

2 个答案:

答案 0 :(得分:0)

由于getProductName()返回SimpleStringProperty,您需要使用get()从中检索字符串。只需使用:

String prd = model.getProductName().get();

答案 1 :(得分:0)

您的模型实施不正确。您应该使用以下模式:

public class Model {

    private SimpleStringProperty productName = new SimpleStringProperty();

    public SimpleStringProperty productNameProperty() {
        return productName ;
    }

    public final String getProductName() {
        return productNameProperty().get();
    }

    public final void setProductName(String productName) {
        productNameProperty().set(productName);
    }

}

和其他属性类似。

如果使用e(fx)clipse插件,可以通过右键单击,选择“Source”,然后选择“Generate JavaFX Getters and Setters”,从属性定义自动生成方法。我认为NetBeans具有类似的功能。