调整组件逻辑的大小

时间:2013-07-30 21:59:26

标签: java javafx

我是Java的新手。我想在JavaFX中实现resize事件,但我的问题更像是逻辑问题。

bp.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent me) {

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 1 == 0) {

                    bp.setPrefSize(480, 280);
                    bp.setMaxSize(480, 280);

                }

                if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0) {
                    bp.setPrefSize(320, 180);
                    bp.setMaxSize(320, 180);

                }
            }
        });

当我用bp组件上的鼠标点击一个时,我的代码扩展了大小。当我双击时,组件再次收缩到正常大小。

我想以这种方式编辑代码:我想在结束扩展它时单击该组件。当我再次单击以缩小组件时。你能告诉我如何将逻辑修改成我的代码吗?

3 个答案:

答案 0 :(得分:2)

看起来简单的if - else会:

if (me.getButton().equals(MouseButton.PRIMARY) && me.getClickCount() % 2 == 0) {
    bp.setPrefSize(480, 280);
    bp.setMaxSize(480, 280);
} else {
    bp.setPrefSize(320, 180);
    bp.setMaxSize(320, 180);
}

我认为更好的替代方法是在isExpanded中使用handle布尔字段:

if (me.getButton().equals(MouseButton.PRIMARY) && isExpanded) {
    // shrink:
    bp.setPrefSize(320, 180);
    bp.setMaxSize(320, 180);
    isExpanded = false;
} else {
    // expand:
    bp.setPrefSize(480, 280);
    bp.setMaxSize(480, 280);
    isExpanded = true;
}

答案 1 :(得分:1)

嗯,你需要跟踪状态。不熟悉JavaFX,但假设你可以编辑bp的类,我会将其更新为以下内容:

class BP{
    public boolean expanded = false; //this should be true if default state is expanded

    public void toggleExpanded(){
        if(expanded){
            this.setPrefSize(480, 280);
            this.setMaxSize(480, 280);
        }else{
            this.setPrefSize(320, 180);
            this.setMaxSize(320, 180);
        }
    }

    //rest of BP class
}

然后让你的听众如下:

    bp.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent me) {

            if (me.getButton().equals(MouseButton.PRIMARY)) {
                bp.toggleExpanded();
            }
        }
    });

答案 2 :(得分:1)

MouseEvent.getClickCount()返回一小段时间间隔内小区域的点击次数,如文档所述。您需要将状态(正常或扩展)存储在变量中,并相应地切换大小和状态。