संपादित करने के लिए कैसे तालिका में / खुला सटीक सेल

वोट
34

तालिका fxml है। कॉलम: प्रथम, अंतिम नाम, फोन, ईमेल मैं आदेश सटीक ईमेल संपादित करने के लिए स्तंभ ईमेल पर माउस क्लिक perfom करना चाहते हैं। निम्नलिखित कोड को संपादित करने को ठीक से नहीं काम कर रहा है, हमेशा खुले ईमेल, नहीं सटीक सेल

 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