javafx同时捕获了多个关键的新闻事件

时间:2015-07-21 12:37:47

标签: javafx keypress

当我按下键盘的2个键时,我想抓住这个事件(ctrl + here) 在这里放大tabview我的代码,到目前为止我只能抓住ctrl,我不知道如何抓住事件当我们按住ctrl然后点击+(或者至少点击ctrl然后c每次到缩放),我有关键组合的想法:

final KeyCombination keyCtrlPlus = new KeyCodeCombination(KeyCode.PLUS,KeyCombination.CONTROL_ANY); 但我不知道如何在addEventFilter()中做到这一点。有什么帮助吗?

m_TabView.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e)
    {
       if (keyCtrlPlus.match(e))
       { 
       //function to zoom tabview 
          zoomOut(e);
       }
    }
}); 

3 个答案:

答案 0 :(得分:2)

这就是我做的。在我看来,它有点简单。更不用说,这个特别回答了Coeur的问题;那是如何检查 addEventFilter 方法中的KeyCombination ......

这是我的控制器类......

@FXML private TextField textField;

final KeyCombination keyShiftTab = new KeyCodeCombination(KeyCode.TAB, KeyCombination.SHIFT_ANY);

@FXML
public void initialize()
{
    textField.addEventFilter(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>()
    {
        @Override
        public void handle(KeyEvent e)
        {
            if (keyShiftTab.match(e))
            {
                doSomthing();
                e.consume();
            }
        }
    });
}

对我来说就像一个冠军。我希望这会有所帮助。

答案 1 :(得分:1)

您可以添加一个监听器,在按位集中注册按键事件的所有按键,并在密钥释放事件中评估和取消注册它们。

像这样的东西,支持多个键,包括修饰符:

import java.util.BitSet;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class Main extends Application {

    private BitSet keyboardBitSet = new BitSet();

    Scene scene;
    Label label;

    @Override
    public void start(Stage primaryStage) {
        HBox root = new HBox();

        label = new Label();

        root.getChildren().add(label);

        scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();

        scene.addEventFilter(KeyEvent.KEY_PRESSED, keyPressedEventHandler);
        scene.addEventFilter(KeyEvent.KEY_RELEASED, keyReleasedEventHandler);

        // init label text
        updateKeyboardStatus();
    }

    /**
     * "Key Pressed" handler for all input events: register pressed key in the bitset
     */
    private EventHandler<KeyEvent> keyPressedEventHandler = new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {

            // register key down
            keyboardBitSet.set(event.getCode().ordinal(), true);

            updateKeyboardStatus();
        }
    };

    /**
     * "Key Released" handler for all input events: unregister released key in the bitset
     */
    private EventHandler<KeyEvent> keyReleasedEventHandler = new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {

            // register key up
            keyboardBitSet.set(event.getCode().ordinal(), false);

            updateKeyboardStatus();
        }
    };

    /**
     * Detect all keys and show them in the label
     */
    private void updateKeyboardStatus() {

        StringBuilder sb = new StringBuilder();
        sb.append("Current key combination: ");

        int count = 0;
        for( KeyCode keyCode: KeyCode.values()) {

            if( keyboardBitSet.get(keyCode.ordinal())) {

                if( count > 0) {
                    sb.append( " ");
                }

                sb.append(keyCode.toString());

                count++;
            }

        }

        label.setText(sb.toString());

    }

    public static void main(String[] args) {
        launch(args);
    }
}

enter image description here

答案 2 :(得分:0)

也许这可以帮到你:

this.scene.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if(key.length()>0){
            if(key.toString().equals(keyCombination1)){
                System.out.println("Key Combination 1 pressed");

            }else if(key.toString().equals(keyCombination2)){
                System.out.println("Key Combination 2 pressed");
            }else if(key.toString().equals(keyCombination3)){
                System.out.println("Key Combination 3 pressed");
            }

            key.setLength(0);
        }
    }
});

取自:

https://code.google.com/p/javafx-demos/source/browse/trunk/javafx-demos/src/main/java/com/ezest/javafx/demogallery/KeyCombinationDemo.java