Java FX 8 - TableViewオブジェクト内のオブジェクトを表示します

StackOverflow https://stackoverflow.com//questions/25020647

  •  21-12-2019
  •  | 
  •  

質問

マイケースクライアントオブジェクトのオブジェクトのリストから Tableview コンポーネントをロードしようとしています。クライアントオブジェクトには、アドレスオブジェクトとその逆も含まれています。 クライアントとアドレスオブジェクトは次のように定義されています。

public class Client{

   private String firstName;
   private String lastName;
   private String emailAddress;
   private String phoneNumber;

   private Address clientsAddress;

   public Client(){
     //blah blah
   }

   //getters
   ...
   //setters
   ...
}

public class Address{

   //address lines + county
   private String a1;
   private String a2;
   private String a3;
   private String county;

   private Client client;

   public Address(){
     //blah blah
   }

   //getters
   ...
   //setters
   ...
}
.

クライアントのフィールドをクライアントオブジェクト内のフィールド名を列にマッピングするテーブルビューに表示することができます。

final TableView<Client> tableView = new TableView<>();
final TableColumn firstNameCol = new TableColumn("First Name");
final TableColumn lastNameCol = new TableColumn("Last Name");
final TableColumn emailCol = new TableColumn("Email Address");
final TableColumn addressCol1 = new TableColumn("Address Line 1");
final TableColumn addressCol2 = new TableColumn("Address Line 2");

firstNameCol.setMinWidth(90);
firstNameCol.setMaxWidth(110);
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));

lastNameCol.setMinWidth(90);
lastNameCol.setMaxWidth(110);
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));

emailCol.setMinWidth(100);
emailCol.setMaxWidth(210);
emailCol.setCellValueFactory(new PropertyValueFactory<>("emailAddress"));

//Don't know how to access the Address Object inside Client Object in Next two parts

addressColumn1.setMinWidth(100);
addressColumn1.setMaxWidth(200);
addressColumn1.setCellValueFactory(new PropertyValueFactory<>(""));

adddessColumn2.setMinWidth(100);
addressColumn2.setMaxWidth(200);
addressColumn2.setCellValueFactory(new PropertyValueFactory<>(""));

tableView.getColumns().addAll(firstNameCol, lastNameCol, emailCol, addressColumn1, addressColumn2);
.

私の問題は、クライアントオブジェクト内のアドレスオブジェクトにアクセスする方法、またはアドレスオブジェクト内のフィールド名をテーブル列にマッピングする方法はあります。あらゆる助けがありがとうございました。

役に立ちましたか?

解決

チップをありがとう、私はクライアントオブジェクトにアクセスできる call メソッドを上書きすることによってそれを作動させました。その後、アドレスオブジェクトにアクセスして simpletringproperty を返し、各列を適切に更新することができました。

addressColumn1.setCellValueFactory(new Callback<CellDataFeatures<Client, String>, ObservableValue<String>>() {
        @Override
        public ObservableValue<String> call(CellDataFeatures<Client, String> c) {
            return new SimpleStringProperty(c.getValue().getAddress().getA1());                
        }
}); 
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top