然后多条数据的话右边会有个下拉条。如图:可是如今就是拉动右边的下拉条"/>

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

Posted ljbguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX的同一个HBox下拖动下拉条左側button乱跳动的问题?相关的知识,希望对你有一定的参考价值。

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


然后多条数据的话右边会有个下拉条技术分享。如图技术分享


可是如今就是拉动右边的下拉条。左边的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);

                        }
                }
            }
        }
    }

















































































































以上是关于JavaFX的同一个HBox下拖动下拉条左側button乱跳动的问题?的主要内容,如果未能解决你的问题,请参考以下文章

Javafx 中 GridPane 中的 HBox

JavaFX HBox 对齐

如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置? [关闭]

javafx中已经创建的scene的宽高能改变吗?怎么改呢?

如何在 javafx 中设置带有子窗口的菜单栏?

拖动功能无法正常工作! JavaFX VBox 拖动