Πώς να επεξεργαστείτε / ανοικτή ακριβή κελί του πίνακα

ψήφοι
34

ο πίνακας είναι fxml. Στήλες: Όνομα, επώνυμο, τηλέφωνο, e-mail θα ήθελα να perfom κλικ του ποντικιού στη στήλη E-mail για να επεξεργαστείτε την ακριβή ηλεκτρονικού ταχυδρομείου. Ο κώδικας που ακολουθεί δεν λειτουργεί σωστά, πάντα ανοιχτό το email για να επεξεργαστείτε, όχι την ακριβή κυττάρων

 table.setOnMouseClicked(new EventHandler<javafx.scene.input.MouseEvent>() {
Δημοσιεύθηκε 22/03/2016 στις 18:53
χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Εδώ είναι ένα απλό παράδειγμα για το πώς να επεξεργαστείτε μια στήλη σε μια προβολή πίνακα. Μπορείτε να χρησιμοποιήσετε μια στήλη πεδίο κειμένου, το οποίο θα επιτρέψει την είσοδο των δεδομένων, όταν κάνετε κλικ σε αυτό. Σε αυτή την περίπτωση, μόνο η στήλη ηλεκτρονικού ταχυδρομείου είναι επεξεργάσιμο.

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;


public class JavaFXApplication7 extends Application {

    @Override
    public void start(Stage primaryStage) {
        TableView<Person> tv = new TableView();
        TableColumn<Person, String> fCol = new TableColumn<>();
        TableColumn<Person, String> lCol = new TableColumn<>();
        TableColumn<Person, String> pCol = new TableColumn<>();
        TableColumn<Person, String> eCol = new TableColumn<>();

        tv.setEditable(true);
        tv.getColumns().addAll(fCol, lCol, pCol, eCol);

        fCol.setCellValueFactory(data -> data.getValue().firstName);
        lCol.setCellValueFactory(data -> data.getValue().lastName);
        pCol.setCellValueFactory(data -> data.getValue().phone);
        eCol.setCellValueFactory(data -> data.getValue().email);
        eCol.setCellFactory(tc -> new TextFieldTableCell<>());

        ObservableList<Person> items = FXCollections.observableArrayList();
        Person p = new Person();
        p.email.set("[email protected]");
        p.firstName.set("Tony");
        p.lastName.set("Stark");
        p.phone.set("(555) 555-1212");

        items.add(p);

        tv.setItems(items);

        StackPane root = new StackPane();
        root.getChildren().add(tv);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    public class Person {
        StringProperty firstName = new SimpleStringProperty();
        StringProperty lastName = new SimpleStringProperty();
        StringProperty phone = new SimpleStringProperty();
        StringProperty email = new SimpleStringProperty();



    }

}
Απαντήθηκε 22/03/2016 στις 19:20
πηγή χρήστη

ψήφοι
0
table.setOnMouseClicked(new EventHandler<javafx.scene.input.MouseEvent>() {

θέτει το χειριστή κλικ για το σύνολο TableViewαντ 'αυτού. Με αυτό τον τρόπο δεν μπορεί να γίνει διάκριση μεταξύ των στηλών που κάνετε κλικ.

Θα πρέπει να χρησιμοποιήσετε τη λειτουργία επεξεργασίας που παρέχονται από TableCellαντ 'αυτού:

// Simplified Person class
public class Person {

    private final StringProperty name;

    private final StringProperty email;

    public Person(String name, String email) {
        this.email = new SimpleStringProperty(email);
        this.name = new SimpleStringProperty(name);
    }

    public final String getEmail() {
        return this.email.get();
    }

    public final void setEmail(String value) {
        this.email.set(value);
    }

    public final StringProperty emailProperty() {
        return this.email;
    }

    public final String getName() {
        return this.name.get();
    }

    public final void setName(String value) {
        this.name.set(value);
    }

    public final StringProperty nameProperty() {
        return this.name;
    }

}
TableView<Person> table = new TableView<>(FXCollections.observableArrayList(
        new Person("Darth Vader", "[email protected]"),
        new Person("James Bond", "[email protected]")));
table.setEditable(true);

Callback<TableColumn<Person, String>, TableCell<Person, String>> cellFactory = col
        -> new TableCell<Person, String>() {

            {
                // make cell itself editable
                setEditable(true);
            }

            @Override
            public void startEdit() {
                super.startEdit();
                // open dialog for input when the user edits the cell
                TextInputDialog dialog = new TextInputDialog(getItem());
                dialog.setGraphic(null);
                dialog.setHeaderText("Set new " + col.getText() + ".");
                dialog.setTitle("Edit " + col.getText());
                Optional<String> opt = dialog.showAndWait();
                if (opt.isPresent()) {
                    commitEdit(opt.get());
                } else {
                    cancelEdit();
                }
            }

            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                setText(empty ? null : item);
            }

        };

TableColumn<Person, String> name = new TableColumn<>("name");
name.setCellValueFactory(p -> p.getValue().nameProperty());
name.setCellFactory(cellFactory);

TableColumn<Person, String> email = new TableColumn<>("email");
email.setCellValueFactory(p -> p.getValue().emailProperty());
email.setCellFactory(cellFactory);

table.getColumns().addAll(name, email);
Απαντήθηκε 23/03/2016 στις 08:36
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more