首页 > 解决方案 > JavaFx:复选框不需要的“背景”

问题描述

我正在寻找删除复选框的背景,因为它在 a 中占用空间TableCell并导致 theCheckBox不居中。

如您所见,如果背景标记为红色,则它超出了复选框并占用了空间。

这是您可以验证它的最小代码和屏幕截图:

控制器:

public class Controller implements Initializable {

    @FXML
    private TableColumn<Object,String> one;
    @FXML
    private TableView<Object> table;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        one.setCellFactory(cell -> new CheckBoxTableCell<Object, String>(){
            @Override
            public void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if(empty){
                    return;
                }
                CheckBox graphic = (CheckBox) getGraphic();
                graphic.setStyle("-fx-background-color: red");
            }
        });
        table.getItems().add(new Object());
    }
}

在此处输入图像描述

我想消除红色部分,所以只保留盒子本身。

我试图为它重置填充,但它不起作用。你能帮助我吗?

setPadding(new Insets(0,-x,-y,0)注意:如果你能解释为什么它是唯一的解决方案,我不会接受这样设置负值来补偿“错误”。

标签: javafxcheckboxjavafx-8

解决方案


底部的空格(~1px)来自“padding”属性,右边的空格(~5px)来自label-padding属性。因此,如果您将两者都关闭,则可以摆脱背景。

CheckBox graphic = (CheckBox) getGraphic();
graphic.setStyle("-fx-background-color: red;-fx-label-padding:0px;-fx-padding:0px;");

推荐阅读