java.lang.IllegalArgumentException:参数类型不匹配javafx

时间:2014-10-06 19:12:56

标签: java javafx-2

我正在尝试将ToolTip ui控件添加到TableView的TableColumn中。 我得到以下异常。请帮忙。

SEVERE: Failed to load skin 'com.sun.javafx.scene.control.skin.TooltipSkin' for control Label[id=null, styleClass=tooltip]'123'
java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

以下是代码。

TableColumn<HomeDraftRequestModel, Long> revenueColId = (TableColumn) getReqForMyActionTableView()
            .getColumns().get(8);

    revenueColId.setCellFactory(new Callback<TableColumn<HomeDraftRequestModel, Long>, TableCell<HomeDraftRequestModel, Long>>() {
        @Override
        public TableCell<HomeDraftRequestModel, Long> call(
                TableColumn<HomeDraftRequestModel, Long> param) {
            Label label = new Label();

            return new TableCell<HomeDraftRequestModel, Long>() {
                @Override
                protected void updateItem(Long item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setGraphic(null);
                    } else {
                        label.setText(item + "");
                        Tooltip toopTip = new Tooltip(item + "");
                        Tooltip.install(label, toopTip);
                        label.setUnderline(true);
                        label.setCursor(Cursor.HAND);
                        label.setOnMouseEntered(new EventHandler<MouseEvent>() {
                            @Override
                            public void handle(MouseEvent arg0) {
                                label.setTooltip(toopTip);
                            }
                        });
                        setGraphic(label);
                    }
                }

            };
        }
    });

1 个答案:

答案 0 :(得分:0)

Label中的所有有用功能也直接在TableCell中定义(它们都是Labeled的子类)。所以你可以摆脱标签,直接在TableCell上调用方法。您也不需要鼠标监听器:工具提示知道何时显示自己。只需致电setTooltip(...)即可启用它。

以下内容应该有效:

            protected void updateItem(Long item, boolean empty) {
                super.updateItem(item, empty);
                if (empty) {
                    setText(null);
                    setTooltip(null);
                } else {
                    setText(item + "");
                    Tooltip toolTip = new Tooltip(item + "");
                    setUnderline(true);
                    setCursor(Cursor.HAND);
                    setTooltip(toolTip);
                }
            }

我不完全确定你为什么得到你得到的例外;但它应该有助于简化代码并使用更“标准”的东西。