Toteutan toimintoa, joka vaihtaa aktiivista ikkunaa näppäinyhdistelmällä Ctrl + W. Käytän setSelected()-funktiota aktiivisen ikkunan valinnassa.
Toiminto toimii, mutta jostakin käsittämättömästä syystä alkuperäinen ikkuna palaa takaisin aktiiviseksi välittömästi vaihdon jälkeen, jos focus on JInternalFrame-ikkunalla. Jos taas focus on ikkunan alikomponentilla, esim. JPanelilla, jolla on oma näppäinkuuntelijansa, ikkunan vaihto toimii ongelmitta.
Mitä ihmettä? Miksi java palauttaa itsestään alkuperäisen ikkunan aktiiviseksi?
Jostain syystä java alkaa kulkea seuraavanlaista polkua ikkunan valinnan jälkeen ja vaihtaa alkuperäisen ikkunan takaisin aktiiviseksi:
java.awt.Component.firePropertyChange(Unknown Source)
java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
java.beans.PropertyChangeSupport.fire(Unknown Source)
javax.swing.plaf.basic.BasicInternalFrameUI$Handler.propertyChange(Unknown Source)
javax.swing.plaf.basic.BasicInternalFrameUI.activateFrame(Unknown Source)
javax.swing.DefaultDesktopManager.activateFrame(Unknown Source)
javax.swing.JInternalFrame.setSelected(Unknown Source)
javax.swing.JInternalFrame.fireInternalFrameEvent(Unknown Source)
Itse itselleni vastaten:
En sitten tiennyt, että Javassa on olemassa ctrl + w -ikkunanvaihto. Se tuli käyttöön kun poistin focuksen siirron pois päältä, setFocusTraversalKeysEnabled(false), ja vaihtoi alkuperäisen ikkunan takaisin vaihdettuani ikkunaa manulaalisesti koodissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.