Javafx 如何消除tableview编辑单元的灰色背景

Javafx 如何消除tableview编辑单元的灰色背景,javafx,tableview,Javafx,Tableview,问题 编辑表格单元格时,行高通常会变高,这是不需要的行为: 我设法用这个css消除了高度变化: .text-field-table-cell { -fx-padding: 0; -fx-background-insets: 0.0; } .text-field-table-cell .text-field { -fx-padding: 0; -fx-background-insets: 0.0; -fx-background-color:yellow;

问题

编辑表格单元格时,行高通常会变高,这是不需要的行为:

我设法用这个css消除了高度变化:

.text-field-table-cell {
    -fx-padding: 0;
    -fx-background-insets: 0.0;
}
.text-field-table-cell .text-field {
    -fx-padding: 0;
    -fx-background-insets: 0.0;
    -fx-background-color:yellow;
    -fx-border-width: 0;
}
但是单元格中仍然没有完全填充文本字段。可见灰色背景:

问题

有人知道如何消除编辑单元格的灰色背景吗?要么着色,要么移除

代码

如果有人想测试它,下面是完整的代码:

InlineEditingTableViewCSS.java

public class InlineEditingTableViewCSS extends Application {

    private final ObservableList<Data> data =
        FXCollections.observableArrayList(
                new Data(1.,5.),
                new Data(2.,6.),
                new Data(3.,7.),
                new Data(4.,8.)
        );

    private TableView<Data> table;

    @Override
    public void start(Stage stage) {

        // create edtiable table
        table = new TableView<Data>();
        table.setEditable(true);

        // column 1 contains numbers
        TableColumn<Data, Number> number1Col = new TableColumn<>("Number 1");
        number1Col.setMinWidth(100);
        number1Col.setCellValueFactory( cellData -> cellData.getValue().number1Property());
        number1Col.setCellFactory( createNumberCellFactory());

        // column 2 contains numbers
        TableColumn<Data, Number> number2Col = new TableColumn<>("Number 2");
        number2Col.setMinWidth(100);
        number2Col.setCellValueFactory( cellData -> cellData.getValue().number2Property());
        number2Col.setCellFactory( createNumberCellFactory());

        // add columns & data to table
        table.setItems(data);
        table.getColumns().addAll( number1Col, number2Col);




        // switch to edit mode on keypress
        // this must be KeyEvent.KEY_PRESSED so that the key gets forwarded to the editing cell; it wouldn't be forwarded on KEY_RELEASED
        table.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {

                if( event.getCode() == KeyCode.ENTER) {
//                  event.consume(); // don't consume the event or else the values won't be updated;
                    return;
                }

                // switch to edit mode on keypress, but only if we aren't already in edit mode
                if( table.getEditingCell() == null) {
                    if( event.getCode().isLetterKey() || event.getCode().isDigitKey()) {  

                        TablePosition focusedCellPosition = table.getFocusModel().getFocusedCell();
                        table.edit(focusedCellPosition.getRow(), focusedCellPosition.getTableColumn());

                    }
                }

            }
        });

        table.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {

                if( event.getCode() == KeyCode.ENTER) {
                    table.getSelectionModel().selectBelowCell();
                }
            }
        });     

        // single cell selection mode
        table.getSelectionModel().setCellSelectionEnabled(true);
        table.getSelectionModel().selectFirst();




        // add nodes to stage
        BorderPane root = new BorderPane();
        root.setCenter(table);

        Scene scene = new Scene( root, 800,600);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        stage.setScene(scene);
        stage.show();
    }

    /**
     * Number cell factory which converts strings to numbers and vice versa.
     * @return
     */
    private Callback<TableColumn<Data, Number>, TableCell<Data, Number>>  createNumberCellFactory() {

        Callback<TableColumn<Data, Number>, TableCell<Data, Number>> factory = TextFieldTableCell.forTableColumn( new StringConverter<Number>() {

            @Override
            public Number fromString(String string) {
                return Double.parseDouble(string);
            }

            @Override
            public String toString(Number object) {
                return object.toString();
            }
        });

        return factory;
    }

    /**
     * Table data container
     */
    public static class Data {

        private final SimpleDoubleProperty number1;
        private final SimpleDoubleProperty number2;

        private Data( Double number1, Double number2) {
            this.number1 = new SimpleDoubleProperty(number1);
            this.number2 = new SimpleDoubleProperty(number2);
        }

        public final DoubleProperty number1Property() {
            return this.number1;
        }

        public final double getNumber1() {
            return this.number1Property().get();
        }

        public final void setNumber1(final double number1) {
            this.number1Property().set(number1);
        }

        public final DoubleProperty number2Property() {
            return this.number2;
        }

        public final double getNumber2() {
            return this.number2Property().get();
        }

        public final void setNumber2(final double number2) {
            this.number2Property().set(number2);
        }


    }

    public static void main(String[] args) {
        launch(args);
    }


} 
或者有没有一个好的机制来找出节点当前正在使用哪个CSS

多谢各位

有人知道如何消除图像的灰色背景吗 编辑单元格

设置textfield的填充值:

.text-field-table-cell {
    -fx-padding: 0;
    -fx-background-insets: 0.0;
}
.text-field-table-cell .text-field {
    -fx-padding: 3 0 3 0;
    -fx-background-insets: 0.0;
    -fx-background-color:yellow;
    -fx-border-width: 0;
}

谢谢,但这会去掉文本字段的背景,使其看起来是灰色的。我在寻找相反的方向,我。E为用户正在键入的字段着色。谢谢,但现在选择的内容在编辑模式下与单元格的颜色相同,即。E黄色的。你知道怎么预防吗?我想要的是当你在编辑模式下键入时,整个单元格被着色,其余的布局/css应该保持原样。@Roland,我认为css的唯一选项是设置文本字段的填充。否则需要一个带有Java代码的自定义tablecell。我已经试过了,没有成功。尽管如此,您的透明度解决方案仍然是迄今为止最好的。@Roland,the-fx padding:30;根据我的观察,以上几点似乎都没问题。
.text-field-table-cell {
    -fx-padding: 0;
    -fx-background-insets: 0.0;
}
.text-field-table-cell .text-field {
    -fx-padding: 3 0 3 0;
    -fx-background-insets: 0.0;
    -fx-background-color:yellow;
    -fx-border-width: 0;
}