相关疑难解决方法(0)

在JavaFX中单击外部可编辑的TableView单元格时如何提交?

我有一个表格单元工厂负责在JavaFX TableView中创建可编辑单元格.

我正在尝试为tableview实现一些附加功能,以便当用户在可编辑单元格外部单击时进行提交(编辑的文本将被保存,而不会根据默认的tableview行为进行丢弃.)

我添加了一个textField.focusedProperty()事件处理程序,我从文本字段提交文本.但是,当一个单击外部时,当前单元格cancelEdit()被调用并且调用commitEdit(textField.getText());无效.

我已经意识到,一旦cancelEdit()被称为TableCell.isEditing()返回false,所以提交永远不会发生.

如何在用户点击可编辑单元格外部时提交文本?

提交setOnEditCommit()事件处理程序后,将处理验证和数据库逻辑.我没有把它包含在这里,因为它很可能会使事情进一步复杂化.

// EditingCell - for editing capability in a TableCell
public static class EditingCell extends TableCell<Person, String> {
private TextField textField;

public EditingCell() {
}

@Override public void startEdit() {
    super.startEdit();

    if (textField == null) {
        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); …
Run Code Online (Sandbox Code Playgroud)

java javafx-8

13
推荐指数
3
解决办法
9986
查看次数

TableView不会在焦点丢失事件上提交值

我想创建一个具有以下功能的表:

  • 在按键上编辑
  • 输入key =下一行
  • Tab键=下一列
  • 退出键=取消编辑

下面是实现这些功能的代码.值应该在焦点丢失时提交.问题:他们没有承诺.触发焦点更改事件,根据控制台输出值将是正确的,但最后表格单元格中的值是旧值.

有谁知道如何防止这种情况,你如何获得当前的EditingCell对象,以便我可以手动调用提交?毕竟,应该调用某种验证器,如果值不正确,则会阻止更改焦点.

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableViewInlineEditDemo extends Application {

    private final TableView<Person> table = new TableView<>();
    private final ObservableList<Person> data =
            FXCollections.observableArrayList(
            new Person("Jacob", "Smith", "jacob.smith@example.com"),
            new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
            new …
Run Code Online (Sandbox Code Playgroud)

javafx tableview

12
推荐指数
2
解决办法
9783
查看次数

JavaFX表格单元格编辑

我正在尝试用Java创建一个程序来管理我的bookie帐户.我是java的新手,所以我想我会选择一些简单的东西来看看它是如何工作的.我决定使用tableview并使单个单元格可编辑.我一直在关注这个教程http://java-buddy.blogspot.co.uk/2012/04/javafx-2-editable-tableview.html.它详细介绍了如何使用java代码进行操作,并将其复制到新类中可以完美地运行.我决定尝试调整它以使用FXML,因为我喜欢Sceneviewer.我的问题是,数据被加载到表中,但当我单击/双击一个单元格时,没有任何反应.这是我的代码.

testController.java

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.util.Callback;

import java.net.URL;
import java.util.ResourceBundle;

public class testController implements Initializable {

@FXML
private TableColumn<Account, String> usernameCol;

@FXML
private TableColumn<Account, String> balanceCol;

@FXML
private TableView<Account> accountTable;

@FXML
private TableColumn<Account, String> bookieCol;

@FXML
private TableColumn<Account, String> passwordCol;

private ObservableList<Account> dataList =
        FXCollections.observableArrayList(
                new Account("bookie", "username", "password", "0"));


@Override
public void initialize(URL location, ResourceBundle resources) {
    Callback<TableColumn, TableCell> cellFactory = …
Run Code Online (Sandbox Code Playgroud)

java javafx tableview scenebuilder

10
推荐指数
2
解决办法
2万
查看次数

如何使用Integer数据类型编辑表列而不将其更改为String

我有一个数据类型为Integer的表列.我想使这个列可编辑,而无需在任何地方将数据类型更改为String.我使用了textfieldtablecell但它只在按下回车时提交了值.所以我想要一些其他的方法.请提出建议.为了做到[可能我做过这样的事情.但我的细胞不会变得可编辑.

public class EditCell implements initializable{

 @FXML
    private TableView<ResourceMaster> roletable;  
@FXML
    private TableColumn<ResourceMaster, Integer> loadedHrs;
@Override
    public void initialize(URL location, ResourceBundle resources) {

Callback<TableColumn<ResourceMaster,Integer>, TableCell<ResourceMaster,Integer>> txtCellFactory = 
                (TableColumn<ResourceMaster,Integer> p) -> {return new EditingCell();};

loadedHrs.setCellFactory(txtCellFactory);
} 

   public class EditingCell extends TableCell<ResourceMaster, Integer> {
        private TextField textField;
        @Override
        public void startEdit() {
            if (!isEmpty()) {
                super.startEdit();
                if (textField == null) {
                    createTextField();
                }
               // setText(null);
                commitEdit(Integer.valueOf((textField.getText())));
                setGraphic(textField);
                setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                textField.requestFocus();
            }
        }

        @Override
        public void cancelEdit() {
            super.cancelEdit();
            setText(String.valueOf(getItem()));
            setContentDisplay(ContentDisplay.TEXT_ONLY);
        }

        @Override
        public …
Run Code Online (Sandbox Code Playgroud)

javafx

6
推荐指数
1
解决办法
8701
查看次数

JavaFX 可编辑单元格,焦点更改为不同的填充单元格

我需要 JavaFX TableView 的可编辑单元格。默认的 TextFieldTableCell 要求用户按 Enter 来提交更改。我认为典型的用户希望在单击单元格外部时保留更改。我想要的所有功能包括:

  1. 单击选择单元格并
  2. 在选定的单元格中再次单击单元格,或按 Enter 键,开始编辑。
  3. 双击单元格开始编辑。
  4. 按 Enter 键将更改提交到单元格
  5. 在单元格外部的任意位置更改鼠标焦点会将更改提交到单元格

我在这篇文章中找到了一个 EditCell 版本, 它满足前 4 个要求,部分满足第 5 个要求,但是当用户单击表中的另一个填充单元格时,编辑更改将丢失。焦点监听器被触发,但没有提交。单击空单元格或另一个场景元素即可提交更改。

帖子中据称提供了一个解决方案, 但是,该解决方案仅包含代码片段,而不包含工作示例。我无法实施它。

任何人都可以帮助将各个部分放在一起并演示一个类,而不是扩展具有我上面列出的所有功能的 TableCell 类吗?

javafx edit cell tableview tablecell

5
推荐指数
1
解决办法
3263
查看次数

标签 统计

javafx ×4

tableview ×3

java ×2

cell ×1

edit ×1

javafx-8 ×1

scenebuilder ×1

tablecell ×1