0

我是 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会扩大大小。当我双击该组件再次缩小到正常大小。

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

4

3 回答 3

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您在 in 中使用的布尔字段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;
}
于 2013-07-30T22:04:28.147 回答
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();
            }
        }
    });
于 2013-07-30T22:07:55.477 回答
1

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

于 2013-07-30T22:11:52.540 回答