Accelerators - odd behavior

Stephen F Northover steve.x.northover at oracle.com
Fri Sep 26 17:25:22 UTC 2014


This is on Mac.  Will try Windows.

Steve

On 2014-09-26, 1:24 PM, Kevin Rushforth 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