2012-06-24 33 views
17

'de tasarlanan bir fxml dosyasında tanımlı olan bir TableView'ı nasıl doldurulur? Tablo Görünümü'nü veri ile nasıl dolduracağımı bilmek istiyorum ... Gördüğüm tüm örnekler sütunlar içeren bir TableView oluşturur. herşeyi ve sahneye ekleyin. Hepsi java kodunun kendisinde yapıldı.JavaFx Scene Builder

Bilmek istediğim: "formum" u JavaFx Scene oluşturucuda tasarlıyorsam. Tüm tabloları ve sütunları tanımlamak. Bunu java'dan doldurmak için nasıl erişirim? Ya da birisi beni bu konuda uygun bir eğiticiye yönlendirebilirse lütfen. 3 Sütunlar

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml"> 
<children> 
    <TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0"> 
    <columns> 
     <TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" /> 
     <TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" /> 
     <TableColumn prefWidth="75.0" text="Active" fx:id="Active" /> 
    </columns> 
    </TableView> 
</children> 
</AnchorPane> 

benim Java kodunda bir ResultSet benim veriye sahip olan sadece bir TableView -

Ben JavaFX Sahne Builder'daki şeklimi tanımladınız.

ResultSet rs = c.createStatement().executeQuery(SQL); 

TableView'ı doldurmam gerekiyor.

cevap

35

TableView erişmek için

sayesinde size FXML sayfasının bir denetleyici tanımlamanız gerekir. FXML dosyasında AnchorPane için

fx:controller="path.to.MyController" 

niteliğini ekleyin. Sonra denetleyicisi oluşturmak ve bu değişkenlerin önünde @FXML ek açıklama koyarak FXML dosyasından TableView, TableColumns bağlantı:

package path.to; 

public class MyController implements Initializable { 

    @FXML private TableView<User> tableView; 
    @FXML private TableColumn<User, String> UserId; 
    @FXML private TableColumn<User, String> UserName; 
    @FXML private TableColumn<User, String> Active; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id")); 
     UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name")); 
     Active.setCellValueFactory(new PropertyValueFactory<User, String>("active")); 

     tableView.getItems().setAll(parseUserList()); 
    } 
    private List<User> parseUserList(){ 
     // parse and construct User datamodel list by looping your ResultSet rs 
     // and return the list 
    } 
} 

tableview initialize yönteminde doldurulur. Denetleyicide, FXML dosyasının yüklenmekte olduğu için oluşturuldukları için yeni bir tablo veya tablo oluşturmamadığımıza dikkat edin. Ayrıca, TableView ve Tablecolumn değişken adlarının karşılık gelen FXML dosyasındaki fx:id değerleriyle aynı olması gerektiğini unutmayın. Bu nedenle, UserId, UserName ve Active adları uygun isimler olmasa da, bunları hem FXML dosyasında hem de Controller'da sırasıyla userIdCol, userNameCol ve userActiveCol gibi adlarla değiştirin.

+0

sayesinde-etmedin sınıf Kullanıcı ne olmalı :) – Chrispie

+2

kontrolörleri biliyordu? – Chiranjib

+3

Bu cevap için teşekkürler. Ancak kısa bir not: Başlatılabilir arayüz artık gerekli değildir. Bunu uygulamak zorunda değilsin. Sadece Denetleyicinizde bir yöntem var: '@FXML private void initialize()' ve FXMLLoader tarafından çağrılacak. [Dokümanlarda ispat] (http://download.java.net/jdk8/jfxdocs/javafx/fxml/Initializable.html) – alisianoi

0

Yo Kumandanızda yapabilirsiniz:

@FXML 
private TableView<User> table; 
private List<User> users; 

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    // Set the columns width auto size 
    table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 
    table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for id column size 
    table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for dt column size 
    table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for cv column size 
    table.getItems().setAll(this.users); 
}