I have a different behavior wenn I use a IKeySelectionManager with Swing 
or ULC.
 
With Swing, the 'not-matching' KeyEvent (in this case PF10) is forwarded 
the the container of the combobox. 
With ULC, the KeyEvent ist consumed.

See the code snipets:

1. I register a keyboardAction for keyEvent F10 with 
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT on a container.
2. I put tow comboboxes on this container. the second combobox have a 
IKeySelectionManager.
3. When the second combobox has the focus,  the keyEvent F10 shoul be 
forwarded.

Regards,
Christophe Perret

mailto:[EMAIL PROTECTED]


ULC:

public class TestULC extends AbstractApplication{
 
        /**
         * @param args
         */
        public static void main(String[] args) {
 
                DevelopmentRunner.setApplicationClass(TestULC.class);
                DevelopmentRunner.main(args);
 
        }

        /* (non-Javadoc)
         * @see com.ulcjava.base.application.IApplication#start()
         */
        public void start() {
 
                final ULCFrame frame = new ULCFrame("Test KeyboardListener 
ULC");
                frame.addWindowListener(new IWindowListener() {
 
                        public void windowClosing(WindowEvent event) {
                                ApplicationContext.terminate();
                        }
                });
 
                frame.setSize(500, 300);
 
                ULCBoxPane pane = new ULCBoxPane(true);
                pane.add(getCombobox());
                pane.add(getComboBoxWithSelectionManager()); 
                pane.add(getText()); 
                pane.add(getTextWithKeyListeners()); 
 
 
                pane.registerKeyboardAction(new IActionListener() {
 
                        public void actionPerformed(ActionEvent event) {
 
                                new ULCAlert(" ", "F10 pressed", 
"ok").show();
 
                        }}, KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), 
ULCComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
 
                frame.add(pane);
                frame.setVisible(true);
 
        }


        /**
         * @return
         */
        private ULCComponent getComboBoxWithSelectionManager() {

                ULCComboBox combo = getCombobox();
                combo.setKeySelectionManager(new IKeySelectionManager(){
 
                        public int selectionForKey(char keyChar, 
IComboBoxModel model) {
                                // do some  stuff here
                                return -1;
                        }});
 
                return combo;
        }


        /**
         * @return
         */
        private static ULCComboBox getCombobox() {

                return new ULCComboBox(new String[]{"one", "two", 
"three"});
        }
 
        /**
         * @return
         */
        private static ULCTextField getText() {

                return new ULCTextField("very simple ULCTextField");
        }
 
        /**
         * @return
         */
        private static ULCTextField getTextWithKeyListeners() {
 
                ULCTextField txt = new ULCTextField("ULCTextField with 
KeyListeners");
 
                txt.addKeyListener(new IKeyListener() {

                        public void keyTyped(KeyEvent event) {

                                new ULCAlert( " ", "any key pressed on 
TextField", "ok").show();
 
                        }});
 
                txt.registerKeyboardAction(new IActionListener(){

                        public void actionPerformed(ActionEvent event) {

                                new ULCAlert( " ", "F11 pressed on 
TextField", "ok").show();
 
                        }}, KeyStroke.getKeyStroke(KeyEvent.VK_F11, 
0),ULCComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
                return txt;
        }
}

Swing:

public class TestSwing {
 
        /**
         * @param args
         */
        public static void main(String[] args) {
 
 
                final JFrame frame = new JFrame("Test KeyboardListener 
Swing");

 
                frame.setSize(500, 300);
 
                final JPanel pane = new JPanel();
                pane.add(getCombobox());
                pane.add(getComboBoxWithSelectionManager()); 
                pane.add(getText()); 
                pane.add(getTextWithKeyListeners()); 
 
 
                pane.registerKeyboardAction(new ActionListener(){

                        public void actionPerformed(ActionEvent e) {

                                JOptionPane.showMessageDialog(pane, "F10 
pressed on pane.");
 
                        }}, KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), 
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
 
                frame.add(pane);
 
                frame.setVisible(true);

 
        }



        /**
         * @return
         */
        private static JComponent getComboBoxWithSelectionManager() {

                JComboBox combo = getCombobox();
                combo.setKeySelectionManager(new 
JComboBox.KeySelectionManager(){

                        public int selectionForKey(char aKey, 
ComboBoxModel aModel) {

                                // do some stuff here
 
                                return -1;
                        }});

                return combo;
        }


        /**
         * @return
         */
        private static JComboBox getCombobox() {

                return new JComboBox(new String[]{"one", "two", "three"});
        }
 
        /**
         * @return
         */
        private static JTextField getText() {

                return new JTextField("very simple ULCTextField");
        }
 
        /**
         * @return
         */
        private static JTextField getTextWithKeyListeners() {
 
                final JTextField txt = new JTextField("ULCTextField with 
KeyListeners");
 
                txt.addKeyListener(new KeyListener() {

                        public void keyTyped(KeyEvent e) {

                                JOptionPane.showMessageDialog(txt, 
"keyTyped on JTextField.");
 
                        }

                        public void keyPressed(KeyEvent e) {

                                JOptionPane.showMessageDialog(txt, 
"keyPressed on JTextField.");
 
                        }

                        public void keyReleased(KeyEvent e) {

                                JOptionPane.showMessageDialog(txt, 
"keyReleased on JTextField.");
 
                        }});
 
                txt.registerKeyboardAction(new ActionListener() {

                        public void actionPerformed(ActionEvent e) {

                                JOptionPane.showMessageDialog(txt, "F11 
pressed on JTextField.");
 
                        }}, KeyStroke.getKeyStroke(KeyEvent.VK_F11, 0), 
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
 
                return txt;
        }
}

Reply via email to