2013-03-10 11 views
5

Yararlı bilgilerden kaçınmadan olabildiğince kısa olmak istiyorum. Aşağıdaki sınıfı vardır: başka bir sınıfı, istemci sahipJavaFX TableView için öğeler nasıl ayarlanır? Nesne başka bir nesne içeriyor mu?

public class Address{ 
StringProperty city = new SimpleStringProperty(); 
StringProperty street = new SimpleStringProperty(); 

//following the constructor, getters and setters 
... 
} 

, bu bir 3 çıkışı gereken bir TableView nesnesi içeren bir adres elemanını

public class Client { 

StringProperty name = new SimpleStringProperty(); 
StringProperty id = new SimpleStringProperty(); 
ObjectProperty<Address> address = new SimpleObjectProperty<>(); 

//following the constructor, getters and setters 
... 
} 

ve bir kontrol ile JavaFX arayüze sahip İstemci sınıfının üyelerini ve belirtilen nesne için adres sınıfının şehir üyesini sütunlar. My TableView ve TableColumn tanımı

public class SettingsController { 
TableColumn<Client, String> clientNameCol; 
TableColumn<Client, String> clientEmailCol; 
TableColumn<Client, String> clientCityCol; 
private TableView<Client> clientSettingsTableView; 
... 
... 
    clientNameCol = new TableColumn<>("Name"); 
    clientNameCol.setCellValueFactory(new PropertyValueFactory<Client, String>("name")); 

    clientEmailCol = new TableColumn<>("email"); 
    clientEmailCol.setCellValueFactory(new PropertyValueFactory<Client, String>("email")); 

    clientCityCol = new TableColumn<>("City"); 
    clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, String>("city")); 

    clientSettingsTableView.setItems(clientData); 
    clientSettingsTableView.getColumns().clear(); 
    clientSettingsTableView.getColumns().addAll(clientNameCol, clientEmailCol, clientCityCol); 

ve tabii ki

Müşteri nesne bir dizi içeren bir ObservableList clientData olduğu aşağıdaki kod bulunmaktadır. Her şey, her istemci için şehri çıkarması gereken sütun dışında iyi çalışır. İstemci nesnesinin şehir için (bir Adres üyesi tarafından bulunan) sütununu nasıl tanımlamalıyım? (

clientCityCol = new TableColumn<>("City"); 
clientCityCol.setCellValueFactory(new PropertyValueFactory<Client, Address>("address")); 
// ======== setting the cell factory for the city column 
clientCityCol.setCellFactory(new Callback<TableColumn<Client, Address>, TableCell<Client, Address>>(){ 

     @Override 
     public TableCell<Client, Address> call(TableColumn<Client, Address> param) { 

      TableCell<Client, Address> cityCell = new TableCell<Client, Address>(){ 

       @Override 
       protected void updateItem(Address item, boolean empty) { 
        if (item != null) { 
         Label cityLabel = new Label(item.getCity()); 
         setGraphic(cityLabel); 
        } 
       }      
      };    

      return cityCell;     
     } 

    }); 

Adres sınıfı, bir alıcı getCity (vardır) bir Dize olarak şehir üyesini döndürür: Yardımlarınız için

+0

http://fxapps.blogspot.com/2012/09/showing-object-properties-in-tableview.html yararlı olabilir – invariant

cevap

6

@invariant teşekkürler, daha biraz googled ve ben şu çözümü ile sona erdi).

+0

Gerçekten sayesinde 1 @markus bana yardımcı oldu. Bu ortak bir tasarım durumu olmalı, ancak web üzerinde bir bilgi birikimi buluyorum. Gelecekteki tüm ziyaretçiler için, resmi belgelerinde bu bir şey yok mu? – demongolem

+0

Sadece neye bakıyordum, aslında istediğiniz herhangi bir şeyi çizim yapabilirsiniz updateTem –

0

Bu, fxml'de çalışır?

<TableColumn prefWidth="8" text="City"> <cellValueFactory > <PropertyValueFactory property="adress.city" /> </cellValueFactory> </TableColumn>

i boş hücre var bu şekilde Çalışma:

Aşağıdaki kodu düşünün.

+7

Bu bir soru veya cevap? – jewelsea

+0

Bu cevap için teşekkürler. Ben sadece bir bütün [diğer yönünü] keşfettim (https://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm#CACHDCCF) javafx fxml – smac89

0

Eğer clientCityCol TableColumn<Client, String> clientCityCol;'un tanımını TableColumn<Client, Address> clientCityCol; içine değiştirmeniz gerektiğinden bahsetmeyi unuttuysanız, aksi halde çalışmaz.

İlgili konular