2017-09-19 3 views
1

My DTOオブジェクトには別の2つのオブジェクトが含まれています。私はテーブルのそれらの値を設定する必要があります。JAVAFXテーブルビューで値を設定する - 別のオブジェクトを持つオブジェクト

controller.java

package controller; 

import com.jfoenix.controls.JFXButton; 
import com.jfoenix.controls.JFXDatePicker; 
import com.jfoenix.controls.JFXTextField; 
import dto.AppointmentDTO; 
import dto.DoctorDTO; 
import dto.PatientDTO; 
import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 


public class AddAppointmentController implements Initializable { 


    @FXML 
    private TableView<AppointmentDTO> tblView; 

    private ObservableList<AppointmentDTO> tblData; 

    /** 
    * Initializes the controller class. 
    */ 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     tblData = FXCollections.observableArrayList(); 

     tblView.getColumns().get(0).setCellValueFactory(new PropertyValueFactory<>("appointmentID")); 
     tblView.getColumns().get(1).setCellValueFactory(new PropertyValueFactory<>("appointDate")); 
     tblView.getColumns().get(2).getColumns().get(0).setCellValueFactory(new PropertyValueFactory<>("patientName")); 
     tblView.getColumns().get(2).getColumns().get(1).setCellValueFactory(new PropertyValueFactory<>("patienAge")); 
     tblView.getColumns().get(2).getColumns().get(2).setCellValueFactory(new PropertyValueFactory<>("ContactNumber")); 
     tblView.getColumns().get(3).getColumns().get(0).setCellValueFactory(new PropertyValueFactory<>("doctorName")); 
     tblView.getColumns().get(3).getColumns().get(1).setCellValueFactory(new PropertyValueFactory<>("hospital")); 

     tblData.add(new AppointmentDTO(12, "201", new PatientDTO(2, "uh", 12, "hj"), new DoctorDTO(4, "ghj", "ghj"))); 

     tblView.setItems(tblData); 
    } 

} 

AppointmentDTO.java そして、これは完全にクラスにカプセル化されます。

package dto; 
    public class AppointmentDTO { 
     private int appointmentID; 
     private String appointDate; 
     private PatientDTO patientDTO; 
     private DoctorDTO doctorDTO; 
    } 

PatientDTOは完全にこれらの特性を有するカプセル化されます。

private int patienID; 
    private String patientName; 
    private int patienAge; 
    private String ContactNumber; 

DoctorDTOも完全にこれらの特性を用いてカプセル化されます。

アウト

private int doctorID; 
private String doctorName; 
private String hospital; 
+0

を行うことができ、私はあなたが 'FXを置けば、あなたのコードは非常にきれいになると思います。 –

答えて

0

あなたは、例えば、余談として

@FXML 
private TableColumn<AppointmentDTO, String> patientNameColumn ; 

// ... 

public void initialize() { 

    // ... 

    patientNameColumn.setCellValueFactory(cellData -> 
     new SimpleStringProperty(cellData.getValue().getPatientDTO().getPatientName())); 

    // ... 
} 
+0

を指定する必要がある値(つまりデータ)です。しかし、このエラーは来る。私はなぜそれがどのようにして解決するのか分からない。 – kasun

+0

互換性のない型:ラムダ式の不正な戻り型 SimpleStringPropertyをObservableValueに変換できません。 ここで、CAP#1は新鮮な型変数です。 CAP#1はキャプチャからオブジェクトを継承しますか? – kasun

+0

@kasun更新を参照 –

0

チェックthisリンクそれはListCellのためだが、私はあなたがTableViewにそれを簡単に適用することができると思います。

多分thisプロジェクトのコードが役立つかもしれません。表の列にid`sとそれらを直接参照:

+0

これにはセルファクトリーではなく、実際にはcell * value *ファクトリーを使用する必要があります。それは –

関連する問題