From: Alan M. <ala...@op...> - 2001-06-02 08:48:52
|
Slava wrote: >> Didn't you fix the jdk1.4 issue with the keyboard? >> A patch (or let's say the deletion of a workaround) was published on the list... > >Commenting out KeyEventWorkaround is not the correct solution since >it contains some useful code (filtering out useless events that do >not need to be handled in any case). Until someone finds out >exactly which part of the code is causing problems, the problem will >remain unfixed. Has anyone else noticed that shift-clicking and control-dragging also don't work in jdk1.4? Apparently the AWT group at Sun decided unilaterally to stop sending the SHIFT_MASK, CTRL_MASK, etc. with input events. According to the docs, we're supposed to use the newer modifiers: SHIFT_DOWN_MASK, CTRL_DOWN_MASK, etc.. So I tried making that change, only to have the compiler tell me those fields don't exist. But I found that the related methods, <evt>.isShiftDown(), <evt>.isControlDown(), etc., _do_ work (by checking the very same fields that the compiler says don't exist, as it happens). So anyway, the fix is to replace all those bitwise comarisons with the corresponding isWhateverDown() calls. I'm not sure if I interpreted all these expressions correctly, but at least I can type capital letters now. Here's a sample of what I came up with (from KeyEventWorkaround): private static void handleBrokenKeys(KeyEvent evt) { // If you have any keys you would like to add to this list, // e-mail me if(evt.isAltDown() && evt.isControlDown()) { last = LAST_ALTGR; return; } else if((evt.isAltGraphDown() && evt.isShiftDown()) && !(evt.isAltDown() || evt.isControlDown() || evt.isMetaDown())) { last = LAST_NOTHING; return; } int keyCode = evt.getKeyCode(); if(evt.isAltDown()) last = LAST_ALT; else if((keyCode < KeyEvent.VK_A || keyCode > KeyEvent.VK_Z) && keyCode != KeyEvent.VK_LEFT && keyCode != KeyEvent.VK_RIGHT && keyCode != KeyEvent.VK_UP && keyCode != KeyEvent.VK_DOWN && keyCode != KeyEvent.VK_DELETE && keyCode != KeyEvent.VK_BACK_SPACE && keyCode != KeyEvent.VK_TAB && keyCode != KeyEvent.VK_ENTER) last = LAST_BROKEN; else last = LAST_NOTHING; lastKeyTime = System.currentTimeMillis(); } Does that look right, Slava? --Alan |