2014-10-06 110 views
-1

我正在尝试将ToolTip ui控件添加到TableView的TableColumn。 我收到以下异常。请帮忙。java.lang.IllegalArgumentException:参数类型不匹配javafx

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); 
        } 
       } 

      }; 
     } 
    }); 

回答

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); 
       } 
      } 

我不完全知道为什么你让你越来越除外;但它应该有助于简化代码并使用更“标准”的东西。

相关问题