java.lang.IllegalArgumentException:参数类型不匹配javafx
我正在尝试将工具提示ui控件添加到TableView的TableColumn中。 我得到以下例外。请帮忙java.lang.IllegalArgumentException:参数类型不匹配javafx,java,javafx-2,Java,Javafx 2,我正在尝试将工具提示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
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);
}
}
};
}
});
TableColumn revenueColId=(TableColumn)getReqForMyActionTableView()
.getColumns().get(8);
revenueColId.setCellFactory(新回调(){
@凌驾
公用电话(
表(列参数){
标签=新标签();
返回新的TableCell(){
@凌驾
受保护的void updateItem(长项,布尔值为空){
super.updateItem(项,空);
if(空){
设置图形(空);
}否则{
label.setText(项+“”);
工具提示toopTip=新工具提示(项+“”);
工具提示。安装(标签,toopTip);
label.setUnderline(true);
label.setCursor(Cursor.HAND);
label.setonmouseintered(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent arg0){
label.setTooltip(toopTip);
}
});
设置图形(标签);
}
}
};
}
});
标签中所有有用的功能也直接定义在表格单元格中(它们都是标签的的子类)。因此,您可以去掉标签,直接在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);
}
}
我不完全清楚你为什么会得到这样的例外;但它应该有助于简化代码并使用更“标准”的东西