JavaFx TalbleView向下滚动/向上滚动问题

时间:2015-02-07 16:27:37

标签: java uitableview javafx tableview

enter image description here

我在JavaFx TableView上遇到了大量数据的问题,例如图片上的项目发生了什么。

对于庞大的数据,当我选择行或单元格时,TableView会疯狂地工作。 我不止一次重复编号'131004'仅供参考

如何用大数据解决这个问题?!?我没有找到任何资源。

EDITED 当我使用向上/向下滚动

时,我也有同样的问题

班级

import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.TableCell;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;

/**
 *
 * @author mohammad
 */
public class EditingCellNew extends TableCell<Object, Integer> {


    private TextField textField;

    public EditingCellNew() {
        this.setAlignment(Pos.CENTER);
    }

    @Override
    public void startEdit() {
        if (!isEmpty()) {
            super.startEdit();
            if (textField == null) {
                createTextField();
            }
            textField.setText(getString());
            //setText(null);
            setGraphic(textField);
            setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            textField.selectAll();
            Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    textField.requestFocus();
                }
            });
        }
    }

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

    @Override
    public void updateItem(Integer item, boolean empty) {
        super.updateItem(item, empty);
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            if (isEditing()) {
                if (textField != null) {
                    textField.setText(getString());
                }
                setGraphic(textField);
                setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
            } else {
                setText(getString());
                setContentDisplay(ContentDisplay.TEXT_ONLY);
            }
        }
    }

    private void createTextField() {
        textField = new TextField(getString());

        textField.setAlignment(Pos.CENTER);
        textField.setMinWidth(this.getWidth() - this.getGraphicTextGap() * 2);
        textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent t) {
                if (t.getCode() == KeyCode.ENTER) {

                    commitEdit(Integer.parseInt(textField.getText()));
                    System.out.println("table row : " + getTableRow().getIndex());
                    updateTableRow(getTableRow());
                    updateTableColumn(getTableColumn());
                    updateTableView(getTableView());
                } else if (t.getCode() == KeyCode.ESCAPE) {
                    cancelEdit();
                }
            }
        });

        textField.setOnKeyReleased(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent t) {
                if (t.getCode() == KeyCode.ENTER) {
                    updateTableRow(getTableRow());
                    updateTableView(getTableView());
                    //bondTable.getItems().set(bondTable.getSelectionModel().getSelectedIndex(), bondTable.getSelectionModel().getSelectedItem());
                    System.out.println("realesed enter");
                }
            }
        });
    }

    private String getString() {
        return String.valueOf(getItem()) == null ? "" : String.valueOf(getItem());
    }  
}

0 个答案:

没有答案