JavaFX Tisch -, wie Sie Komponenten hinzufügen?

Habe ich ein swing-Projekt mit vielen JTables, um alle möglichen Dinge aus dem text, um Platten zu einem mix aus Schaltflächen und Kontrollkästchen. Ich war in der Lage, dies zu tun durch überschreiben der Zelle renderer zurückgeben generic JComponents. Meine Frage ist, kann eine ähnliche Tabelle gemacht mit JavaFx?

Will ich update alle meine Tabellen in das Projekt zu verwenden, JavaFx unterstützt gesten meistens. Es scheint, dass TableView ist die JavaFx-Komponente zu verwenden, und ich versuchte, hinzufügen von Schaltflächen, um es aber als angezeigt, es zeigt den string-Wert der Taste, nicht die Taste selbst. Es sieht aus wie ich haben, überschreiben Sie die Zeile, die Fabrik-oder Zell-factory zu tun, was ich will, aber es gibt nicht viele Beispiele. Hier ist der code, den ich als Beispiel benutzt, zeigt die Schaltfläche als string.

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: Nach genauer zu untersuchen habe ich festgestellt, Beispiele, überschreiben Sie die Zelle von Grafiken mit vordefinierten Zelltypen wie text und überprüft. Es ist nicht klar, ob alle generischen jfx-Komponente kann in eine Zelle wie ein JFXPanel. Dies ist im Gegensatz zu JTable, da die Verwendung einer JTable ich kann alles, was erbt von JComponent, solange ich das setup der render-Klasse richtig. Wenn jemand weiß, wie (oder ob es überhaupt möglich ist), um ein JFXPanel in eine Zelle oder eine andere generische JFx-Komponente wie einen Button, der wäre sehr hilfreich.

InformationsquelleAutor Mark | 2013-05-03

Schreibe einen Kommentar