2016-12-06 65 views
0

我想要做的是从当前选定的行上点击按钮获取数据,然后返回该数据。然而它现在返回的东西似乎是packagename+ classname+ randomnumbers和字母的格式。javafx getselecteditem返回意外的输出

[email protected] 
[email protected] 

当选择另一行时,随机数字和字母会发生变化。我试图用线程作为例子。
Getting selected item from a JavaFX TableView。我想就如何达到我想要的结果做出回答。而且,如果可能的话,也可以将数据保存在变量中。

方法我用:

@FXML 
    public void getRow() { 
     UserDetails row = tableview.getSelectionModel().getSelectedItem(); 
     System.out.println(row); 
    } 

控制器类。

package simple; 

import java.net.URL; 
import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ResourceBundle; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 

/** 
* 
* @author admin 
*/ 
public class FXMLUserController implements Initializable { 

    @FXML 
    private TableView<UserDetails> tableview; 
    @FXML 
    private TableColumn<UserDetails, String> columnId; 
    @FXML 
    private TableColumn<UserDetails, String> columnType; 
    @FXML 
    private TableColumn<UserDetails, String> columnKleur; 
    @FXML 
    private TableColumn<UserDetails, String> columnLuchthaven; 
    @FXML 
    private TableColumn<UserDetails, String> columnKenmerken; 
    @FXML 
    private TableColumn<UserDetails, String> columnStatus; 
    @FXML 
    private TableColumn<UserDetails, String> columnDatum; 
    @FXML 
    private Button btnLoad; 
    //declare observable list for database data 
    private ObservableList<UserDetails> data; 
    private DbConnection dc; 
    @FXML 
    private Button editRow; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     dc = new DbConnection(); 
     loadDataFromDatabase(); 
    } 

    @FXML 
    public void loadDataFromDatabase() { 
     try { 
      Connection conn = dc.Connect(); 
      data = FXCollections.observableArrayList(); 
      // Execute query and store result in a resultset 
      ResultSet rs = conn.createStatement().executeQuery("SELECT * FROM gevonden_bagage"); 
      while (rs.next()) { 
       //get strings 
       data.add(new UserDetails(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), 
         rs.getString(6), rs.getString(7))); 
      } 

     } catch (SQLException ex) { 
      System.err.println("Error" + ex); 
     } 

     //Set cell values to tableview. 
     tableview.setEditable(true); 
     columnId.setCellValueFactory(new PropertyValueFactory<>("id")); 
     columnType.setCellValueFactory(new PropertyValueFactory<>("type")); 
     columnKleur.setCellValueFactory(new PropertyValueFactory<>("kleur")); 
     columnLuchthaven.setCellValueFactory(new PropertyValueFactory<>("luchthaven")); 
     columnKenmerken.setCellValueFactory(new PropertyValueFactory<>("kenmerken")); 
     columnStatus.setCellValueFactory(new PropertyValueFactory<>("status")); 
     columnDatum.setCellValueFactory(new PropertyValueFactory<>("datum")); 

     tableview.setItems(null); 
     tableview.setItems(data); 

    } 

    @FXML 
    public void getRow() { 
     UserDetails row = tableview.getSelectionModel().getSelectedItem(); 
     System.out.println(row); 
    } 
} 

Model类

package simple; 

import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 

/** 
* 
* @author admin 
*/ 
public class UserDetails { 

    private final StringProperty id; 
    private final StringProperty type; 
    private final StringProperty kleur; 
    private final StringProperty luchthaven; 
    private final StringProperty kenmerken; 
    private final StringProperty status; 
    private final StringProperty datum; 

    //Default constructor 
    public UserDetails(String id, String type, String kleur, String luchthaven, String kenmerken, String status, String datum) { 
     this.id = new SimpleStringProperty(id); 
     this.type = new SimpleStringProperty(type); 
     this.kleur = new SimpleStringProperty(kleur); 
     this.luchthaven = new SimpleStringProperty(luchthaven); 
     this.kenmerken = new SimpleStringProperty(kenmerken); 
     this.status = new SimpleStringProperty(status); 
     this.datum = new SimpleStringProperty(datum); 

    } 

    //getters 
    public String getId() { 
     return id.get(); 
    } 

    public String getType() { 
     return type.get(); 
    } 

    public String getKleur() { 
     return kleur.get(); 
    } 

    public String getLuchthaven() { 
     return luchthaven.get(); 
    } 

    public String getKenmerken() { 
     return kenmerken.get(); 
    } 

    public String getStatus() { 
     return status.get(); 
    } 

    public String getDatum() { 
     return datum.get(); 
    } 

    //setters 
    public void setId(String value) { 
     id.set(value); 
    } 

    public void setType(String value) { 
     type.set(value); 
    } 

    public void setKleur(String value) { 
     kleur.set(value); 
    } 

    public void setLuchthaven(String value) { 
     luchthaven.set(value); 
    } 

    public void setKenmerken(String value) { 
     kenmerken.set(value); 
    } 

    public void setStatus(String value) { 
     status.set(value); 
    } 

    public void setDatum(String value) { 
     datum.set(value); 
    } 

    //property values 
    public StringProperty idProperty() { 
     return id; 
    } 

    public StringProperty typeProperty() { 
     return type; 
    } 

    public StringProperty kleurProperty() { 
     return kleur; 
    } 

    public StringProperty luchthavenProperty() { 
     return luchthaven; 
    } 

    public StringProperty kenmerkenProperty() { 
     return kenmerken; 
    } 

    public StringProperty statusProperty() { 
     return status; 
    } 

    public StringProperty datumProperty() { 
     return datum; 
    } 
} 
+0

发布您的UserDetails类。 – Sedrick

回答

0

你需要这样说row.someMethodorVariableInUserDetails 什么都你试图返回在你的UserDetails类

看看下面这个例子从here

Person person = taview.getSelectionModel().getSelectedItem(); 
System.out.println(person.getName()); 

I在这个例子中,他们不得不说person.somemethod()。在这种情况下,person.getName();

+0

你可能做的另一件事是添加toString方法到你的UserDetails类。然后你可以说System.out.println(row.toString());我没有测试过这个,但值得一试。 – Sedrick

+1

谢谢你的回答。我能够通过使用我的UserDetails类中的所有getter来使其工作。正如您在上面的示例中所述.. –