JavaFX table - comment ajouter des composants?

J'ai un swing de projet qui utilise de nombreux JTables pour afficher toutes sortes de choses à partir du texte de panneaux pour un mélange de boutons et cases à cocher. J'ai été en mesure de le faire, par l'écrasement de la table de rendu de cellule pour revenir générique JComponents. Ma question est peut une table semblable à être fait à l'aide de JavaFx?

Je veux mettre à jour tous mes tableaux dans le projet d'utiliser JavaFx à l'appui de gestes pour la plupart. Il semble que TableView est le JavaFx composant à utiliser et j'ai essayé d'ajouter des boutons, mais lors de l'affichage il montre la chaîne de valeur de la touche, pas le bouton lui-même. Il semble que j'ai remplacer la ligne de l'usine ou de la cellule de l'usine pour faire ce que je veux, mais il n'y a pas beaucoup d'exemples. Voici le code que j'ai utilisé comme un exemple qui affiche le bouton comme une chaîne de caractères.

import javax.swing.JButton;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class GestureEvents extends Application {
private TableView<Person> table = new TableView<Person>();
private final ObservableList<Person> data =
FXCollections.observableArrayList(
new Person("Jacob", "Smith", "[email protected]","The Button"),
new Person("Isabella", "Johnson", "[email protected]","The Button"),
new Person("Ethan", "Williams", "[email protected]","The Button"),
new Person("Emma", "Jones", "[email protected]","The Button"),
new Person("Michael", "Brown", "[email protected]","The Button")
);
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(450);
stage.setHeight(500);
final Label label = new Label("Address Book");
label.setFont(new Font("Arial", 20));
table.setEditable(true);
TableColumn firstNameCol = new TableColumn("First Name");
firstNameCol.setMinWidth(100);
firstNameCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("firstName"));
TableColumn lastNameCol = new TableColumn("Last Name");
lastNameCol.setMinWidth(100);
lastNameCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("lastName"));
TableColumn emailCol = new TableColumn("Email");
emailCol.setMinWidth(200);
emailCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("email"));
TableColumn btnCol = new TableColumn("Buttons");
btnCol.setMinWidth(100);
btnCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("btn"));
table.setItems(data);
table.getColumns().addAll(firstNameCol, lastNameCol, emailCol, btnCol);
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(label, table);
((Group) scene.getRoot()).getChildren().addAll(vbox);
stage.setScene(scene);
stage.show();
}
public static class Person {
private final SimpleStringProperty firstName;
private final SimpleStringProperty lastName;
private final SimpleStringProperty email;
private final JButton btn;
private Person(String fName, String lName, String email, String btn) {
this.firstName = new SimpleStringProperty(fName);
this.lastName = new SimpleStringProperty(lName);
this.email = new SimpleStringProperty(email);
this.btn = new JButton(btn);
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String fName) {
firstName.set(fName);
}
public String getLastName() {
return lastName.get();
}
public void setLastName(String fName) {
lastName.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(String fName) {
email.set(fName);
}
public JButton getBtn(){
return btn;
}
public void setBtn(String btn){
}
}
public static class ButtonPerson{
private final JButton btn;
private ButtonPerson(){
btn = new JButton("The Button");
}
public JButton getButton(){
return btn;
}
}
}

Edit: Après avoir étudié plus loin j'ai trouvé des exemples qui remplacent les cellules des graphiques en utilisant les types de cellules, comme du texte et les contrôles. Il n'est pas clair si un médicament générique jfx composant peut être placé dans une cellule comme un JFXPanel. C'est différent de la JTable, car l'utilisation d'un JTable je peux placer quoi que ce soit qui hérite de JComponent aussi longtemps que je le programme d'installation le rendre classe correctement. Si quelqu'un sait comment (ou si c'est encore possible) pour mettre un JFXPanel dans une cellule ou d'un autre générique JFx composant comme un Bouton qui serait très utile.

InformationsquelleAutor Mark | 2013-05-03