在Java(FX)/ Explorer鼠标中读取特殊MouseButtons

时间:2017-12-07 17:54:30

标签: java javafx mouseevent mouse-buttons

我有兴趣从资源管理器鼠标按钮(通常用于在Web浏览器上前进和后退的鼠标侧面的特殊按钮)捕获输入。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.input.MouseButton;
import static java.lang.System.*;

public class MouseThing extends Application
{
    @Override
    public void start(Stage stage) throws Exception
    {
        Pane pane = new Pane();

        pane.setOnMousePressed(e -> {
            if(e.getButton() == MouseButton.PRIMARY)
                out.println("LEFT"); 
            if(e.getButton() == MouseButton.SECONDARY)
                out.println("RIGHT");      
            if(e.getButton() == MouseButton.MIDDLE)
                out.println("MIDDLE");    
            if(e.getButton() == MouseButton.NONE)
                out.println("OTHER");  
            // How read explorer buttons?  
            out.println("click");
        });

        Scene scene = new Scene(pane, 300, 100);
        stage.setTitle("Demo");
        stage.setScene(scene);
        stage.show();
    }
}

仅举例来说,我想记录前进和后退按钮被激活。此时我唯一可以实现的互动是左,右和中间点击。按鼠标上的forwardback按钮甚至无法注册click打印件。

这篇帖子适用于Javascript:JS special mouse buttons ,但它对我的目的没有用。

1 个答案:

答案 0 :(得分:0)

自从JavaFX 12开始,就可以识别鼠标上的forwardback按钮,因此您可以执行以下操作:

pane.setOnMousePressed(e -> {
    if(e.getButton() == MouseButton.PRIMARY)
        out.println("LEFT");
    if(e.getButton() == MouseButton.SECONDARY)
        out.println("RIGHT");
    if(e.getButton() == MouseButton.MIDDLE)
        out.println("MIDDLE");
    if(e.getButton() == MouseButton.BACK)
        out.println("BACK");
    if(e.getButton() == MouseButton.FORWARD)
        out.println("FORWARD");
    if(e.getButton() == MouseButton.NONE)
        out.println("NONE");  
    out.println("click");
});