Accelerators - odd behavior

Tomas Mikula tomas.mikula at gmail.com
Fri Sep 26 17:28:01 UTC 2014


The explanation could be that on some systems the
KeyCharacterCombination("-").match picks the same key code as the one
produced by key press (e.g. MINUS), while on other systems it picks
the other one (SUBTRACT).

On Fri, Sep 26, 2014 at 7:24 PM, Kevin Rushforth
<kevin.rushforth at oracle.com> wrote:
> Is this on a Mac or on Windows?  I just ran your test case and I get two
> runnables, which is what I would expect.
>
> -- Kevin
>
>
>
> Stephen F Northover wrote:
>>
>> I am only seeing the runnable fired once in FX 8u40.
>>
>> Steve
>>
>> Steps:
>>
>> 1) Run TestKeyCombination
>> 2) Press Control+-
>>
>> Here is the test code:
>>
>> import javafx.application.Application;
>> import javafx.scene.Group;
>> import javafx.scene.Scene;
>> import javafx.scene.control.Button;
>> import javafx.scene.input.KeyCharacterCombination;
>> import javafx.scene.input.KeyCode;
>> import javafx.scene.input.KeyCodeCombination;
>> import javafx.scene.input.KeyCombination;
>> import javafx.stage.Stage;
>>
>> public class TestKeyCombination extends Application {
>>     public static void main(String[] args) {
>>         Application.launch(args);
>>     }
>>
>>     @Override public void start(Stage stage) {
>>         stage.setTitle("Test KeyCombination");
>>         Scene scene = new Scene(new Group(), 600, 450);
>>         Button button1 = new Button();
>>         button1.setText("Click Me");
>>         stage.setScene(scene);
>>         stage.show();
>>
>>         KeyCombination cmdMinus = new KeyCodeCombination(KeyCode.MINUS,
>> KeyCombination.CONTROL_DOWN);
>>         KeyCombination cmdMinusFromCharacter = new
>> KeyCharacterCombination("-", KeyCombination.CONTROL_DOWN);
>>         Runnable runnable = () -> System.out.println("HI");
>>         scene.getAccelerators().put(cmdMinus, runnable);
>>         scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
>>     }
>> }
>>
>>
>> On 2014-09-26, 1:01 PM, Scott Palmer wrote:
>>>
>>> KeyCombination cmdMinus = new Key*Code*Combination(KeyCode.MINUS,
>>> KeyCombination.CONTROL_DOWN);
>>> KeyCombination cmdMinusFromCharacter = new Key*Character*Combination("-",
>>> KeyCombination.CONTROL_DOWN);
>>>
>>> Using the above like this:
>>> scene.getAccelerators().put(cmdMinus, runnable);
>>> scene.getAccelerators().put(cmdMinusFromCharacter, runnable);
>>>
>>> Will result in the runnable being fired twice from the same keypress.
>>>
>>> I propose changing the accelerator processing logic so that only one
>>> runnable gets called as the intention appears to be that a KeyCombination
>>> can only have one runnable associated with it, but the logic in Map
>>> doesn't
>>> see the above two KeyCombinations as the same key in the Map.
>>>
>>> Note: With the second combination above I really wanted something that
>>> worked for both MINUS and SUBTRACT simultaneously - since they both type
>>> the same Character and only one accelerator can be set on a MenuItem.
>>>
>>> Scott
>>
>>
>


More information about the openjfx-dev mailing list