2010-11-29 15 views
0

Il semble que, bien que vous puissiez ajouter ActionS à ComponentS, vous ne pouvez pas les ajouter à ContainerS comme JFrame, JApplet ou JDialog. Comme je ne trouvais rien d'utile sur Google, j'ai senti que je devais partager mes découvertes pour que les gens du futur ne perdent pas trop de temps. N'hésitez pas à ajouter des informations si vous pensez que j'ai manqué quelque chose ou laissé quelque chose.ActionS dans Swing ContainerS (JFrameS etc)

La solution réside dans .getRootPane(), qui vous permettra d'ajouter des actions comme ceci:..

jframe.getRootPane() getInputMap (JComponent.WHEN_FOCUSED) (KeyStroke.getKeyStroke ("INSERT") , insertAction);

Espérons que cela sera utile aux générations futures.

+0

pas vraiment une question .... plus d'un capital funky S –

+0

J'ai suivi la procédure décrite à http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question parce que Comme je l'ai dit, il n'y avait rien à trouver sur Google. Quant à la capitale S, c'est comme ça que le Sun Javadoc a décidé de faire remarquer que le S est pour le pluriel et ne fait pas partie des noms de classe. –

Répondre

0

Bien sûr, vous pouvez ajouter des liaisons de touches à un JPanel. C'est un composant Swing.

Je ne suis pas sûr que le InputMap "WHEN_FOCUSED" fonctionnera. Normalement, le focus est sur un composant, pas sur le volet racine.

Consultez la section Key Bindings pour obtenir la liste des liaisons par défaut et mon exemple simple d'utilisation des liaisons de touches.

+0

Merci pour la correction, je ne sais pas d'où vient le JPanel, car j'ai eu le problème avec JFrame et JDialog - blâmer le codage en fin de soirée. La carte WHEN_FOCUSED a bien fonctionné dans mes tests, même si mon test était simpliste, la carte ANCESTOR pourrait donc être meilleure en général. –