JavaFX的同一个HBox下拖动下拉条左側button乱跳动的问题?

 大神们,我如今有个这种button列。如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTUxMTQyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

然后多条数据的话右边会有个下拉条。如图:

可是如今就是拉动右边的下拉条。左边的button就会乱跳动乱掉。如图:

然后排查了下原因是由于每拉动一次下拉条的时候会调用一个updateItem()的方法。怎么样让这个下拉条拖动

的时候仅仅回调一次这个updateItem()方法? 或者有其它办法改进这样的BUG吗?急求!!

!。。!!

部分代码例如以下:

public class AllRoomOperateButtonTableCell<S, T> extends TableCell<S, T> {

private final HBox mHbox;

private final  Button mViewBn;

private final Button mViewPicBn;

private ObservableValue<T> ov;

private final ObservableList<RoomOperateRecordInfo> mTransList;

private RoomOperateRecordInfo mTransInfo;

private final TableView mTableView;

public AllRoomOperateButtonTableCell(ObservableList<RoomOperateRecordInfo> transList,TableView tableView) {

this.mTransList = transList;

this.mTransInfo = null;

this.mTableView = tableView;

this.mHbox = new HBox();

this.mHbox.setSpacing(5);

this.mHbox.setAlignment(Pos.CENTER);

this.mViewBn = ButtonBuilder.create()

.text("查看")

.prefWidth(60)

.prefHeight(30)

.build();

this.mViewBn.setOnAction(new EventHandler<ActionEvent>() {

@Override

public void handle(ActionEvent event) {

synchronized (mTransList) {

mTableView.getSelectionModel().select(getIndex());

mTransInfo = mTransList.get(getIndex());

if (mTransInfo.getStatus() == CHECK_TRANS_DONE + 10 || mTransInfo.getStatus() == CHECK_TRANS_CANCELLED + 10 || mTransInfo.getStatus() == CHECK_TRANS_SYSTEMCANCELLED + 10) {

CheckingRoomTransInfo checkInfo = new CheckingRoomTransInfo(mTransInfo.getTransId(), mTransInfo.getSubmitTime(), mTransInfo.getRoomNo(), mTransInfo.getCreatedByENo(), mTransInfo.getReadFlag(), mTransInfo.getStatus(), mTransInfo.getProcessTime(),
mTransInfo.getComments(), mTransInfo.getProcessENo());

for(int i=0;i<mTransInfo.getmMinibarInfosList().size();i++){

checkInfo.addmMinibarInfosList(mTransInfo.getmMinibarInfosList().get(i));

}

showCheckTransDetail(checkInfo, null);

}else if (mTransInfo.getStatus() == CLEAN_TRANS_UNHANDLED || mTransInfo.getStatus() == CLEAN_TRANS_UNINSPECTED || mTransInfo.getStatus() == CLEAN_TRANS_INSPECTED || mTransInfo.getStatus() == CLEAN_TRANS_UNPASSED ||mTransInfo.getStatus()
== CLEAN_TRANS_DELAYED ||mTransInfo.getStatus() == CLEAN_TRANS_CANCELLED || mTransInfo.getStatus() == CLEAN_TRANS_TIMEOUT) {

CleanTransInfo cleanInfo = new CleanTransInfo(mTransInfo.getTransId(), mTransInfo.getSubmitTime(), mTransInfo.getRoomNo(), mTransInfo.getCreatedByENo(), mTransInfo.getReadFlag(), mTransInfo.getStatus(), 2, mTransInfo.getProcessTime(),
mTransInfo.getComments(), mTransInfo.getProcessENo());

showCleanTransDetail(cleanInfo, null);

}

mTableView.requestFocus();

}

}

});

this.mViewPicBn = ButtonBuilder.create()

.text("看图")

.prefWidth(60)

.prefHeight(30)

.build();

this.mViewPicBn.setOnAction(new EventHandler<ActionEvent>() {

@Override

public void handle(ActionEvent event) {

mTableView.getSelectionModel().select(getIndex());

mTransInfo = mTransList.get(getIndex());

showRelatedPicDetail(null,mTransInfo);

mTableView.requestFocus();

}

});

mHbox.getChildren().addAll(mViewBn);

setAlignment(Pos.CENTER);

setGraphic(mHbox);

}

@Override

public void updateItem(T item, boolean empty) {

super.updateItem(item, empty);

if (empty) {

setText(null);

setGraphic(null);

} else {

setGraphic(mHbox);

ov = getTableColumn().getCellObservableValue(getIndex());

if (ov instanceof IntegerProperty) {

int status = ((IntegerProperty) ov).get();

if (status == CHECK_TRANS_DONE + 10 || status == CHECK_TRANS_CANCELLED + 10 || status == CHECK_TRANS_SYSTEMCANCELLED + 10

|| status == CLEAN_TRANS_INSPECTED || status == CLEAN_TRANS_CANCELLED || status == CLEAN_TRANS_TIMEOUT) {

mViewBn.setText("查看");

mViewBn.setStyle("-fx-base: olivedrab;");

}else if (status == CHECK_STATUS_CHECKOUT || status == CHECK_TRANS_UNHANDLED + 100 || status == CHECK_TRANS_DONE + 100 || status == CHECK_TRANS_CANCELLED + 100

|| status == CHECK_TRANS_SYSTEMCANCELLED + 100 || status == CLEAN_STATUS_CREATE || status == -CLEAN_TRANS_UNINSPECTED || status == -CLEAN_TRANS_INSPECTED

|| status ==-CLEAN_TRANS_UNPASSED  ||status ==-CLEAN_TRANS_DELAYED  ||  status == -CLEAN_TRANS_CANCELLED || status == -CLEAN_TRANS_TIMEOUT || status == NOTIFY_LOG) {

setGraphic(null);

return;

} else {

mViewBn.setText("处理");

mViewBn.setStyle("-fx-base: orange;");

}

}

if (mTransInfo == null) {

mTransInfo = mTransList.get(getIndex());

if (mTransInfo.IsChecking() != null && mTransInfo.IsChecking() != "" && mTransInfo.getRelatedPicList().size() > 0) {

mHbox.getChildren().add(0,mViewPicBn);

}

}

}

}

}

时间: 2024-10-04 01:31:48

JavaFX的同一个HBox下拖动下拉条左側button乱跳动的问题?的相关文章

JavaFX的同一个HBox下拖动下拉条左侧按钮乱跳动的问题?

 大神们,我现在有个这样的按钮列,如图: 然后多条数据的话右边会有个下拉条,如图: 但是现在就是拉动右边的下拉条,左边的按钮就会乱跳动乱掉,如图: 然后排查了下原因是因为每拉动一次下拉条的时候会调用一个updateItem()的方法,怎么样让这个下拉条拖动 的时候只回调一次这个updateItem()方法? 或者有其他办法改进这种BUG吗?急求!!!!!!! 部分代码如下: public class AllRoomOperateButtonTableCell<S, T> extends Tab

Tomcat下conf下server.xml的文件配置信息

Tomcat下conf下server.xml的文件配置信息,基本上不用做任何修改就可以使用,修改的地方就是host区域的一些配置,此文件设置端口为80. 注意:Tomcat配置文件中(即server.xml文件)不能出现中文,否则服务是无法启动的. [xhtml] view plaincopy <!-- Server中的port监听关闭tomcat的请求,shutdown指定向端口发送的命令串--> <Server port="8005" shutdown="

最近遇到一个很纠结的问题:jquery.autocomplete在IE6下被下拉框遮挡 。

最近遇到一个很纠结的问题:jquery.autocomplete在IE6下被下拉框遮挡 . 如图: 网上找到原因,例如:http://www.360doc.com/content/10/1126/16/2197500_72641076.shtml 但是,我们的问题是我们用了jquery.autocomplete这个控件,这些方法对于我们就不行了. 废话多了,直接解决方法: 第一步:打开jquery.autocomplete.min.js(或者直接jquery.autocomplete.js),找

Android自定义组合控件---教你如何自定义下拉刷新和左滑删除

绪论 最近项目里面用到了下拉刷新和左滑删除,网上找了找并没有可以用的,有比较好的左滑删除,但是并没有和下拉刷新上拉加载结合到一起,要不就是一些比较水的结合,并不能在项目里面使用,小编一着急自己组合了一个,做完了和QQ的对比了一下,并没有太大区别,今天分享给大家,其实并不难,但是不知道为什么网上没有比较好的Demo,当你的项目真的很急的时候,又没有比较好的Demo,那么"那条友谊的小船儿真是说翻就翻啊",好了,下面先来具体看一下实现后的效果吧: 代码已经上传到Github上了,小伙伴们记

使用position:relative制作下边框下的小三角

在制作tab选项卡的时候,有时会有下边框,且下边框下另一个头向下的小三角,这全然能够用css来实现,而不必使用背景图片. 由于使用背景图片时会有一个问题,选项卡内容字数不同.导致使用背景图片时无法控制它始终在中间显示. <ul class="technical_list"> <li class="active-tab">入门指南<div class="triangle"></div></li&

JavaFX(三)窗口拖动

问题场景: 在上一篇中,我们将窗口的默认标题栏隐藏从而导致鼠标点击窗体无法进行拖动. 思路: 给组件添加鼠标按下事件监听器和鼠标拖动事件监听器. 实现: 代码片段: private double xOffset = 0; private double yOffset = 0; 代码片段: root.setOnMousePressed((MouseEvent event) -> { event.consume(); xOffset = event.getSceneX(); yOffset = ev

关于linux系统下iptables下的管理的8种命令

虽然iptables在Unix系统中不是服务,但是为了方便平时的管理也就对iptables写了chkconfig的启动脚本(chkconfig的启动脚本可以参看http://jim123.blog.51cto.com/4763600/1845648),定义在/etc/init.d/即rc.d/init.d目录下,但是iptables和正常的service服务又多了几种命令 Usage: /etc/init.d/iptables {start|stop|reload|restart|condres

CentOS下WDCP下的MYSQL开启远程连接

1.首先要在防火墙开启3306端口访问 2.然后做如下操作 如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入"cmd",进入控制台,然后cd 进入MySQL 的 bin 目录下,然后输入下面的命令. > MySQL -uroot -p123456                 (123456 为 root 用户的密码.) 如何开启MySQL的远程帐号-2)创建远程登陆用户并授权  > grant

关于linux下crontab下脚本执行时,获取的值不正确

本次是因为需要创建定时任务,判断SNMP服务的状态. 通过以下代码进行判断 tmp=`/etc/init.d/snmpd status` snmpd_status=`echo $tmp | grep -Eo "running" ` if [ $snmpd_status = "running" ]  then     snmpd_status="running" else     snmpd_status="stop" fi e