Yes - I have a comment about waiting for the image to display.  Seems
likely that timing may have changed.

I’ll add an explicit delay.

-Kenneth Sloan


On Tue, Oct 22, 2024 at 09:20 Michael Schmid <[email protected]>
wrote:

> Hi Kenneth,
>
> the following works for me (on a newly created ImagePlus named
> 'displayFFTimp'):
>
>
>    //wait a bit after a previous WaitForUserDialog has come up
>    IJ.wait(200);
>    ImageWindow win = displayFFTimp.getWindow();
>    win.toFront();
>
>    IJ.wait(200);
>    //probably not needed
>    displayFFTimp.getCanvas().addKeyListener(this);
>
>    displayFFTimp.getCanvas().removeKeyListener(IJ.getInstance());
>
>    displayFFTimp.getWindow().addKeyListener(this);
>
>    displayFFTimp.getWindow().removeKeyListener(IJ.getInstance());
>
>
> public void keyTyped(KeyEvent e) {...}
>
>
> public void keyPressed(KeyEvent e) {
> ...}
>
> public void keyReleased(KeyEvent e) {...}
>
>
>
> Michael
> ________________________________________________________________
> On 22.10.24 14:41, Kenneth R Sloan wrote:
> > Also note that there is no log output from keyPressed(), which on the
> > surface points away from wait/notify as the problem.
> >
> > And… key presses appear to me to be handled by ImageJ.  Right now I’m
> > focusing on the removeListener() call.
> >
> > -Kenneth Sloan
> >
> >
> > On Tue, Oct 22, 2024 at 08:36 Kenneth R Sloan <[email protected]>
> > wrote:
> >
> >> Thanks - I’ll look into it.  I’ve key point is that this plugin worked
> >> perfectly in 2020, but fails now.
> >>
> >> It turns out that my collaborator now actually prefers checkboxes over
> key
> >> presses, so I might put this problem on the shelf for awhile.
> >>
> >>
> >> -Kenneth Sloan
> >>
> >>
> >> On Tue, Oct 22, 2024 at 08:08 Michael Schmid <[email protected]>
> >> wrote:
> >>
> >>> Hi Kenneth,
> >>>
> >>> as far as I can say, KeyListeners on ImageWindow and ImageCanvas work
> >>> well, also in the current version of ImageJ. I have a plugin with
> >>> essentially the same calls to removeKeyListener and addKeyListener in
> >>> regular use.
> >>>
> >>> Of course, the KeyListener of an image only works if that image is in
> >>> the foreground. It won't work if the ImageJ panel (or something else)
> >>> has focus.
> >>>
> >>> My suspicion is that the problem is not related to the KeyListener but
> >>> rather to the synchronization and/or wait-notify construct.
> >>>
> >>> What is the function that the KeyListener is supposed to trigger?
> >>> If does not take significant computation time, I usually put that
> >>> directly into the keyPressed method. The wait-notify construct is
> needed
> >>> only if the operation can take longer than a fraction of a second. The
> >>> keyPressed callback is executed in the EventQueue; if one puts long
> >>> calculations there, the GUI becomes slow.
> >>>
> >>> Just to make sure, one trivial mistake that sometimes happens is that
> >>> "this" refers to different Objects, e.g. because one has an inner
> class.
> >>>
> >>>
> >>> Michael
> >>> ________________________________________________________________
> >>> On 21.10.24 17:59, Kenneth Sloan wrote:
> >>>> I’m reviving an ImageJ Java plugin from 2020.  It  uses a KeyListener.
> >>>> The new build does not get any keypresses.  I’ve looked at the current
> >>> documentation, and can’t find a problem.  The plugin is fairly large.
> I’ll
> >>> try to make a minimal version - but would be happy to share it on my
> >>> ImageJ Update Site (see below).
> >>>>
> >>>> Remember - this plugin worked fine in 2020, but now fails.
> >>>>
> >>>> Here is what I think is the relevant code:
> >>>>
> >>>>        // listen to keyboard - stop IJ from listening!
> >>>>        win = ipl.getWindow();  // delayed until we are SURE it's
> visible
> >>>>        IJ.log("win = "+win);
> >>>>        canvas = win.getCanvas();
> >>>>        IJ.log("canvas = "+canvas);
> >>>>        win.removeKeyListener(IJ.getInstance());
> >>>>        canvas.removeKeyListener(IJ.getInstance());
> >>>>        IJ.log("removed IJ Listeners");
> >>>>        win.addKeyListener(this);
> >>>>        canvas.addKeyListener(this);
> >>>>        ImagePlus.addImageListener(this);
> >>>>        IJ.log("added Listeners");
> >>>>
> >>>> …
> >>>>
> >>>>        win.requestFocus();
> >>>>        IJ.log("sampling...”);
> >>>>        category = sampleAt(xList.get(currentSamplePoint),
> >>>>
> >>>   yList.get(currentSamplePoint));
> >>>>        IJ.log("sampled”);
> >>>>
> >>>> …
> >>>>
> >>>>        while(true)
> >>>>            {
> >>>>                synchronized(this)
> >>>>                    {
> >>>>                        IJ.log("waiting...");
> >>>>                        wait(); // keyPressed wakes us
> >>>>                        IJ.log("woken up!");
> >>>>                    }
> >>>>
> >>>> …
> >>>>
> >>>>                // key pressed!
> >>>>                // keyCode, keyChar, and modifiers are current
> >>>>                If(keyCode == KeyEvent.VK_SPACE) return -1; // DELETE
> >>> does not work
> >>>>                if(keyCode == KeyEvent.VK_ENTER) return -2; // no mas!
> >>>>                int category = keyCode - KeyEvent.VK_1; // 1-based
> keys;
> >>> 0-based category
> >>>>                if(category < 0) continue; // try again!
> >>>>                if(category >= choices.length) continue; // try again!
> >>>>                return category; // good category!
> >>>>            }
> >>>> ...
> >>>>       @Override
> >>>>        public void keyPressed(KeyEvent e)
> >>>>       {
> >>>>        IJ.log("keyPressed");
> >>>>        keyCode = e.getKeyCode();
> >>>>        keyChar = e.getKeyChar();
> >>>>        modifiers = e.getModifiers();
> >>>>        IJ.log("   "+keyCode+"   "+keyChar+"   "+modifiers);
> >>>>        synchronized(this)
> >>>>            {
> >>>>                IJ.log("notifying");
> >>>>                notify();
> >>>>                IJ.log("notified");
> >>>>            }
> >>>>       }
> >>>>
> >>>> And here is the IJ Log:
> >>>>
> >>>> win = 16385_175994_R_IR_OCT_20120429-09_8C3F4720.bmp
> >>>> canvas = ij.gui.ImageCanvas[canvas1,5,44,384x496]
> >>>> removed IJ Listeners
> >>>> added Listeners
> >>>> sampling...
> >>>> sampleAt(90.05, 63.05)
> >>>> waiting...
> >>>>
> >>>> It looks to me as if we  “wait” and then never get a KeyPress event.
> >>>>
> >>>> When I press keys, I seem to get the usual ImageJ responses (does this
> >>> mean that the IJ Listeners were NOT removed?
> >>>>
> >>>>
> >>>>
> >>>> Update site: CreativeComputation
> >>>> Plugin name: AVL_Area_Fraction
> >>>>
> >>>> —
> >>>> Kenneth Sloan
> >>>> [email protected]
> >>>> Vision is the art of seeing what is invisible to others.
> >>>>
> >>>> --
> >>>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> >>>
> >>> --
> >>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
> >>>
> >>
> >
> > --
> > ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>
> --
> ImageJ mailing list: http://imagej.nih.gov/ij/list.html
>

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html

Reply via email to