首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JavaFX组件处理/实现onMouseClick的正确方法是什么?

从JavaFX组件处理/实现onMouseClick的正确方法是什么?
EN

Stack Overflow用户
提问于 2014-07-13 05:30:41
回答 1查看 2.1K关注 0票数 0

我在这里有一个冗长的问题,关于为什么我的自定义控件到处都失败了。对于那些可能经历过类似事情的人,我找到了一篇很好的最近的文章here

太棒了,我不是开玩笑。

但现在我有了另一个问题。我的控件上有几个文本形状,它们需要响应鼠标单击(包括单击和双击)以及控件本身。

我之前在JavaFX场景生成器工具中将代码部分中的那些控件On Mouse Clicked条目设置为相同的方法名称,并在控制器中实现了该名称。问题是,这就是导致事情崩溃和崩溃并让我哭的原因。

例如,在场景生成器中,我将所有相关控件的On Mouse Clicked设置为handleMouse (我知道这是通用方法名,但它符合我的目的)。然后,我在控制器中使用了另一个方法来处理(我认为)鼠标事件:

代码语言:javascript
复制
@FXML
protected void handleMouse(MouseEvent ME){
    if (ME.getClickCount() > 1) //Do stuff
    else if (/*Other Condition*/) //Do something else
    else if (/*Final Condition*/) //Do something else
}

我认为这是正确的,但是!按照我链接的指南,我发现我很可能是错的。当我从JavaFX场景创建器中查看界面的控制器骨架时,我发现它是这样对事件进行外壳处理的:

代码语言:javascript
复制
@FXML
protected void handleMouse(ActionEvent e){
}

现在看起来不太对劲。除非MouseEvent是从ActionEvent扩展的?真的是这样吗?

不管怎样,我试着忽略这一点,按我的方式做,它爆炸了。令人惊讶的是,我现在知道它为什么爆炸了。

甚至尝试为每个control.onMouseClicked设置一个lambda都会导致它爆炸:

代码语言:javascript
复制
this.texts.stream().foreach((Text txt -> { //texts stores all the controls Text objects for convenient access.
    txt.setOnMouseClicked((MouseEvent ME) -> {
        //Do stuff here (See above)
    };
});

同样,当我终止这段代码时,它工作得很好(除了实际做任何事情之外,我的意思是在相对意义上工作得很好,它加载时没有爆炸)。

那么我该如何正确地捕获MouseEvent呢?它是从ActionEvent扩展的吗?这有什么关系吗?这是它爆炸的真正原因吗?

如果需要,我有更多的代码。

EN

回答 1

Stack Overflow用户

发布于 2014-07-13 21:21:41

我觉得我找到了问题所在。在构造函数中的代码像这样设置之前:

代码语言:javascript
复制
this.texts = new ArrayList<>();
this.texts.add(this.shapeName);
this.texts.add(this.shapeNameValue);
this.texts.add(this.shapeScore);
this.texts.add(this.shapeScoreValue);

this.loader = new FXMLLoader(
    this.getClass().getResource("JPlayer.fxml")
);
this.loader.setController(this);
this.loader.setRoot(this);

try { this.loader.load(); }
catch( IOException ex ) { throw new RuntimeException(ex); }

然后,当我试图流式传输arraylist时,它导致了一个异常。我只能猜测为什么,但在后面添加元素似乎已经解决了问题。无论如何,希望这能在将来对某些人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24717505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档