2016-06-29 7 views
2

私のアプリケーションを実行すると、この問題が発生します。私は私のテーブルに追加する前に、私はクラス(Personas)を作成し、PropertyValueFactoryを使用します。ありがとう、申し訳ありませんが、私はスペイン語を話します。これはコードです:私はTableViewの要素を見ることができません - 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); 
    } 

} 

これは、クラスの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

ポストPersonas' 'のコード。私はそのクラスのアクセサがないことが問題だと思う。それはpublic 'nombreProperty()'または 'getNombre()'とString戻り値の型を持つ 'apellidoProperty()'または 'getApellido()'を持ちます。 – DVarga

+0

[OK]をクリックします。 –

+0

あなたは名前(nombre)と姓(apellido)を返すよりも2つのgetterメソッドを作成しなければならないと思いますか? –

答えて

2

PropertyValueFactoryのマニュアルを参照してください:

コールバックインタフェースの簡易実装を、使用のために特別に をデザインTableColumnセル値ファクトリ内 このクラスの使用例は、次のとおりです。

TableColumn firstNameCol = new TableColumn( "First Name"); firstNameCol.setCellValueFactory(新規 PropertyValueFactory( "firstName")); への参照が( テーブルビュー項目リストのクラスタイプである)PersonクラスタイプでfirstNameProperty()メソッドを想定し、この例で

は、「firstNameの」文字列が使用されます。さらにこのメソッド は、プロパティインスタンスを返す必要があります。これらの条件を満たすメソッドが見つかった場合、TableCellには ObservableValueが設定されます。さらに、TableViewは、 オブザーバを戻り値に自動的に追加します。その結果、変更された変更はTableViewによって観察される になり、セルが直ちに更新されます。このパターンに一致する方法が存在しない場合

は、(上記の例で であること、getFirstName()またはisFirstName())フォールスルー (取得呼び出そうとするためのサポート)または()です。このパターンに一致するメソッド が存在する場合、このメソッドから返される値は で、ReadOnlyObjectWrapperにラップされ、TableCellに返されます。 ただし、この状況では、これは、TableCellが のObservableValueの変更を観察できないことを意味します(前述の の場合のように)。この修正Personasクラスに基づいて

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();} 
} 
関連する問題