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

 大神们,我现在有个这样的按钮列,如图:

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

但是现在就是拉动右边的下拉条,左边的按钮就会乱跳动乱掉,如图:

然后排查了下原因是因为每拉动一次下拉条的时候会调用一个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-08 18:51:30

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

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

 大神们,我如今有个这种button列.如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTUxMTQyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 然后多条数据的话右边会有个下拉条.如图: 可是如今就是拉动右边的下拉条.左边的button就会乱跳动乱掉.如图: 然后排查了下原因是由于每拉动一次下拉条的时候会调用一

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

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

IE8下div中2个按钮只显示一个

IE8下div中2个按钮只显示一个,代码如下: <div id="adviceType" style="display: none;" > <select name="adviceTypeOne" id="adviceTypeOne" class="shortselect" > <option value="-1">--请选择--</option

最近遇到一个很纠结的问题: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),找

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

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

在Mint 16中当按下光驱的弹出按钮后桌面上的光驱图标没有自动消失的问题解决

/*********************************************************************  * Author  : Samson  * Date    : 07/29/2014  * Test platform:  *              Mint 16  *              GNU bash, version 4.2.45  * *************************************************

Win10 导航窗口不能移动文件win10 资源管理器 无法拖动文件到左侧驱动器

Win10 导航窗口不能移动文件怎么办 Win10左侧导航栏不能移动文件怎么办 win10 资源管理器 无法拖动文件到左侧驱动器怎么办 在同一个文件夹可以拖动来移动文件,拖到地址栏的面包屑也可以移动文件,可就是无法拖动文件到左侧驱动器列表来移动/复制文件,如图所示 [解决]经虚拟机模拟自己对系统注册表的修改,发现是因为移除了左侧导航面板"快速访问"这一项,而类似的操作移除OneDrive.网络等项不会引起这个问题. 那解决方案就是把快速访问再加上.(怎么删的怎么加) 修改HKEY_CL

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