广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaFX表编辑提交事件是什么?_北大青鸟IT学校

作者:邓华发布时间:2021-05-20分类:Java技术浏览:831


导读:JavaFX表编辑提交事件是什么?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

JavaFX表编辑提交事件是什么?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

当运行上面的代码并双击编辑单元格,我们必须按 Enter 键提交编辑。 如果我们只是双击并键入一些值,并单击单元格外,commit 事件不会运行,旧的值将被填充。

我们可以重新定义焦点更改上的 commit 事件。


/*

 * Copyright (c) 2008, 2014, Oracle and/or its affiliates.

 * All rights reserved. Use is subject to license terms.

 *

 * This file is available and licensed under the following license:

 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 *

 *  - Redistributions of source code must retain the above copyright

 *    notice, this list of conditions and the following disclaimer.

 *  - Redistributions in binary form must reproduce the above copyright

 *    notice, this list of conditions and the following disclaimer in

 *    the documentation and/or other materials provided with the distribution.

 *  - Neither the name of Oracle nor the names of its

 *    contributors may be used to endorse or promote products derived

 *    from this software without specific prior written permission.

 *

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 */

import javafx.application.Application;

import javafx.beans.property.SimpleStringProperty;

import javafx.beans.value.ObservableValue;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.geometry.Insets;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.scene.control.TableCell;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableColumn.CellEditEvent;

import javafx.scene.control.TableView;

import javafx.scene.control.TextField;

import javafx.scene.control.cell.PropertyValueFactory;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;

import javafx.util.Callback;


public class Main extends Application {


  private final TableView<Person> table = new TableView<>();

  private final ObservableList<Person> data = FXCollections

      .observableArrayList(new Person("A", "B"), new Person("C", "D"));


  public static void main(String[] args) {

    launch(args);

  }


  @Override

  public void start(Stage stage) {

    Callback<TableColumn<Person, String>, TableCell<Person, String>> cellFactory = (

        TableColumn<Person, String> p) -> new EditingCell();


    Scene scene = new Scene(new Group());

    stage.setWidth(450);

    stage.setHeight(550);


    table.setEditable(true);


    TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");

    firstNameCol.setMinWidth(100);

    firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));

    firstNameCol.setCellFactory(cellFactory);


    firstNameCol.setOnEditCommit((CellEditEvent<Person, String> t) -> {

      ((Person) t.getTableView().getItems().get(t.getTablePosition().getRow()))

          .setFirstName(t.getNewValue());

    });


    TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");

    lastNameCol.setMinWidth(100);

    lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));


    table.setItems(data);

    table.getColumns().addAll(firstNameCol, lastNameCol);


    final VBox vbox = new VBox();

    vbox.setSpacing(5);

    vbox.setPadding(new Insets(10, 0, 0, 10));

    vbox.getChildren().addAll(table);


    ((Group) scene.getRoot()).getChildren().addAll(vbox);


    stage.setScene(scene);

    stage.show();

  }


  class EditingCell extends TableCell<Person, String> {


    private TextField textField;


    public EditingCell() {

    }


    @Override

    public void startEdit() {

      if (!isEmpty()) {

        super.startEdit();

        createTextField();

        setText(null);

        setGraphic(textField);

        textField.selectAll();

      }

    }


    @Override

    public void cancelEdit() {

      super.cancelEdit();


      setText((String) getItem());

      setGraphic(null);

    }


    @Override

    public void updateItem(String item, boolean empty) {

      super.updateItem(item, empty);


      if (empty) {

        setText(null);

        setGraphic(null);

      } else {

        if (isEditing()) {

          if (textField != null) {

            textField.setText(getString());

          }

          setText(null);

          setGraphic(textField);

        } else {

          setText(getString());

          setGraphic(null);

        }

      }

    }


    private void createTextField() {

      textField = new TextField(getString());

      textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);

      textField.focusedProperty()

          .addListener(

              (ObservableValue<? extends Boolean> arg0, Boolean arg1,

                  Boolean arg2) -> {

                if (!arg2) {

                  commitEdit(textField.getText());

                }

              });

    }


    private String getString() {

      return getItem() == null ? "" : getItem().toString();

    }

  }


  public static class Person {

    private final SimpleStringProperty firstName;

    private final SimpleStringProperty lastName;


    private Person(String fName, String lName) {

      this.firstName = new SimpleStringProperty(fName);

      this.lastName = new SimpleStringProperty(lName);

    }


    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);

    }

  }

}

上面的代码生成以下结果。

JavaFX表视图6.png

想了解更多关于Java的知识,联系在线客服,或者来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表