当Button在触摸屏上被按下时,JavaFX Button onAction属性不会被触发。

问题描述 投票:-1回答:1

我正在学习JavaFX,并正在开发一个JavaFX应用程序,它将把我的笔记本电脑的触摸屏变成一个迷你钢琴。 我的原型有一堆Buttons来代替钢琴键,每个按钮映射到一个不同的Midi音符。 用鼠标点击按钮,成功触发按钮的onAction属性,并播放相关的音符。 而用手指戳按钮却不能。 程序显然知道我的手指在哪里,因为当我用手指戳按钮时,按钮会改变颜色,就像我将鼠标指针移入按钮时一样。 我知道问题出在JavaFX上,而不是出在Java上,也不是出在我的触摸屏上,因为我在Swing中写了一个基本相同的原型,在这个原型中,戳屏幕可以成功地播放一个音符。 (如果Swing有任何形式的多点触控支持,我也会很高兴地坚持使用Swing。 我想演奏和弦。) 是我遗漏了JavaFX的什么东西,比如触摸屏事件处理程序,还是这里有什么大问题?

郑重声明,我在Xubuntu笔记本上使用OpenJDK 11.0.7和OpenJFX 11.0.2。 下面是相关的代码片段。

@Override
public void start(Stage stage) {

    stage.setTitle("Midi Test");
    buttons = new Button[NOTE_VALUE.length];
    for (int i = 0; i < NOTE_VALUE.length; i++) {
        buttons[i] = new Button(NOTE_NAME[i]);
        buttons[i].setPrefSize(KEY_WIDTH,KEY_HEIGHT);
        buttons[i].setOnAction(this);
    }
    // Layout omitted for brevity
    stage.show();

}

public void handle(ActionEvent event) {

    // Identifies which button was pressed and plays the corresponding note

    int index = -1;
    for (int i = 0; i < buttons.length; i++) {
        if (event.getSource().equals(buttons[i])) {
            index = i;
            break;
        }
    }
    if (index != -1) {
        channels[0].allNotesOff();
        channels[0].noteOn(NOTE_VALUE[index],93);
    }

}

java javafx touch
1个回答
0
投票

在采纳了 @James_D 的诊断建议(谢谢,James)并做了一些额外的研究后,看起来这个问题是由于 OpenJFX 11 内核中一个已知的(但不明显的)错误。 请看讨论 此处 以了解详情。 似乎有一些变通办法,但最直接的解决方案似乎是尝试最新版本的OpenJFX。

© www.soinside.com 2019 - 2024. All rights reserved.