Accelerators - odd behavior
Scott Palmer
swpalmer at gmail.com
Fri Sep 26 17:43:54 UTC 2014
What started all this was that I sued CTRL +/- to zoom in and out in my
app. People found that one press to zoom out needed two presses to zoom
back in.
If the behavior is platform-specific it will be awkward to deal with.
Specially since I want it to work with the numeric keypad as well.. so I
need to manually add accelerators to the scene apart from my MenuItem
accelerators.
Scott
On Fri, Sep 26, 2014 at 1:39 PM, Scott Palmer <swpalmer at gmail.com> wrote:
> Okay.. so what is going on with Windows and CTRL+PLUS ?
>
> Scott
>
> On Fri, Sep 26, 2014 at 1:35 PM, Stephen F Northover <
> steve.x.northover at oracle.com> wrote:
>
>> Two on Windows, one on Mac. See https://javafx-jira.kenai.com/
>> browse/RT-38830
>>
>> Steve
>>
>>
>> On 2014-09-26, 1:25 PM, Stephen F Northover wrote:
>>
>>> 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