我是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
组件上的鼠标点击一个时,我的代码扩展了大小。当我双击时,组件再次收缩到正常大小。
我想以这种方式编辑代码:我想在结束扩展它时单击该组件。当我再次单击以缩小组件时。你能告诉我如何将逻辑修改成我的代码吗?
答案 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
()返回一小段时间间隔内小区域的点击次数,如文档所述。您需要将状态(正常或扩展)存储在变量中,并相应地切换大小和状态。