2016-06-29 16 views
2

Ich habe dieses Problem, wenn ich meine Anwendung ausführen Ich kann die Elemente nicht sehen Als ich zuvor zu meiner Tabelle hinzugefügt habe, erstelle ich eine Klasse (Personas) und die PropertyValueFactory. Danke und Entschuldigung für den Fehler in der Sprache, ich spreche Spanisch. Dies ist der Code:Ich kann das Element einer TableView nicht sehen - JavaFX

package ejemplo.tableview; 

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 


public class EjemploTableView extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     ObservableList<Personas> data = FXCollections.observableArrayList(
       new Personas("Diego","Maradona"), 
       new Personas("Lionel","Messi") 

     ); 
     TableView<Personas> tabla = new TableView(); 

     TableColumn<Personas,String> c1 = new TableColumn("Nombre"); 
     c1.setMinWidth(200d); 
     c1.setCellValueFactory(new PropertyValueFactory<Personas,String>("nombre")); 

     TableColumn<Personas,String> c2 = new TableColumn("Apellido"); 
     c2.setMinWidth(200d); 
     c2.setCellValueFactory(new PropertyValueFactory<>("apellido")); 

     tabla.getColumns().addAll(c1,c2); 
     tabla.setItems(data); 
     StackPane root = new StackPane(); 

     root.getChildren().add(tabla); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Dies ist die Klasse Personas:

package ejemplo.tableview; 

public class Personas { 
    private String nombre; 
    private String apellido; 

    public Personas(String nombre,String apellido){ 
     this.nombre = nombre; 
     this.apellido = apellido; 

    } 
} 
+1

Schreibe den Code von 'Personas'. Ich denke, das Problem wird die fehlenden Accessoren dieser Klasse sein. Es sollte eine öffentliche 'nombreProperty()' oder 'getNombre()' und eine öffentliche 'apellidoProperty()' oder 'getApellido()' mit String-Rückgabetyp haben. – DVarga

+0

Ok, ich poste den Code, Sorry nochmal, ich bin neu auf dieser Seite. –

+0

meinst du, als ich zwei Getter-Methoden erstellen muss, als den Namen (nombre) und den Nachnamen (apellido) zurückzugeben? –

Antwort

2

Überprüfen Sie die Dokumentation von PropertyValueFactory:

Eine bequeme Implementierung der Callback-Schnittstelle für den Einsatz speziell innerhalb der TableColumn-Zellenwertfactory. Ein Beispiel für die Verwendung dieser Klasse ist:

TableColumn firstNameCol = neu TableColumn ("Vorname"); firstNameCol.setCellValueFactory (neu PropertyValueFactory ("firstName"));

In diesem Beispiel ist die „vorName“ string als Verweis auf ein verwendet wird angenommen firstNameProperty() Methode in der Person Klassentyp (die der Klassentyp der Positionsliste Tableview ist). Darüber hinaus muss diese Methode eine Eigenschaftsinstanz zurückgeben. Wenn eine Methode gefunden wird, die diese Anforderungen erfüllt, wird die TableCell mit diesem ObservableValue aufgefüllt. Darüber hinaus fügt TableView dem zurückgegebenen Wert automatisch einen Observer hinzu, so dass alle von der TableView beobachteten Änderungen sind, was dazu führt, dass die Zelle sofort aktualisiert wird.

Wenn keine Methode, um dieses Pattern-Matching existiert, gibt es Durchfall Unterstützung für den Versuch zu erhalten() aufzurufen, oder ist() (das ist, getFirstName() oder isFirstName() im Beispiel oben). Wenn eine mit diesem Muster übereinstimmende Methode existiert, wird der von dieser Methode zurückgegebene Wert in einem ReadOnlyObjectWrapper eingeschlossen und an die TableCell zurückgegeben. In dieser Situation bedeutet dies jedoch, dass die TableCell nicht in der Lage ist, den ObservableValue für Änderungen zu beobachten (wie dies bei dem ersten Ansatz oben der Fall ist).

Basierend auf dieser dem modifizierten Personas Klasse:

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

public class Personas { 
    private StringProperty nombre = new SimpleStringProperty(); 
    private StringProperty apellido = new SimpleStringProperty(); 

    public StringProperty nombreProperty() {return nombre;}; 
    public StringProperty apellidoProperty() {return apellido;}; 

    public Personas(String nombre, String apellido) { 
     this.nombre.set(nombre); 
     this.apellido.set(apellido); 
    } 

    public String getNombre() {return nombre.get();} 
    public String getApellido() {return apellido.get();} 
} 
Verwandte Themen