JDK-6606579 : MToolkit:Focus is lost and no further response to key press (keys TAB/Space)
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 6u2
  • Priority: P4
  • Status: Closed
  • Resolution: Won't Fix
  • OS: linux,solaris_2.5.1
  • CPU: x86,sparc
  • Submitted: 2007-09-19
  • Updated: 2010-04-02
  • Resolved: 2007-09-27
Related Reports
Relates :  
Relates :  
Description
OPERATING SYSTEM(S):
--------------------
Linux (Redhat/Suse)
 

FULL JDK VERSION(S):
-------------------
java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b05)
Java HotSpot(TM) Server VM (build 1.6.0_02-b05, mixed mode)


DESCRIPTION:
------------

PROBLEM DESCRIPTION

Focus is lost using MToolkit but using XToolkit focus is not lost. The same problem is seen in all linux supported LookAndFeel.

Steps to Recreate:
1. Compile our test case
   
2. Launch test case with MAWT and avoid using mouse once application is
   launched
   
   $ AWT_TOOLKIT=MToolkit java dialogs_main

3. Press TAB to reach "Show it!" button (Please do not use mouse to
   bring focus at button)

4. Now press "SpaceBar" to select/click the button, it will display a
   message dialog box.

5. Again press "spaceBar" to select "ok" button of the dialog box
   displayed. Notice focus comes back to the "Show it!" button of
   Tabbed Frame.
   
6. Keep repeating steps 4 and 5

Observed result:
   Focus is lost. Focus seems to be in "show it!" button but now its
   not responding to the keyboard press of "SpaceBar/TAB". 

Notes:
   Problem does not always occur. Frequency is about 4 out of 5 times.
   Problem does not occur on XAWT Toolkit.


TEST CASE:

import javax.swing.*;
import java.beans.*; // Property change stuff
import java.awt.*;
import javax.swing.border.Border;
import java.awt.event.*;

class Dialogs extends JPanel {
    JLabel label;
    ImageIcon icon = new ImageIcon("images/middle.gif");
    JFrame frame;
    String simpleDialogDesc = "Some simple message dialogs";
    String iconDesc = "A JOptionPane has its choice of icons";
    String moreDialogDesc = "Some more dialogs";

    public Dialogs(JFrame frame) {
        this.frame = frame;

        // create the components
        JPanel frequentPanel = createSimpleDialogBox();

        label = new JLabel("Click the \"Show it!\" button"
                           + " to bring up the selected dialog.",
                           JLabel.CENTER);

        // lay them out
        Border padding = BorderFactory.createEmptyBorder(20, 20, 5,
                                                         20);

        MyJTabbedPane tabbedPane = new MyJTabbedPane();
        tabbedPane.addTab("Simple Modal Dialogs", null, frequentPanel,
                          simpleDialogDesc, KeyEvent.VK_S, 0);
        setLayout(new BorderLayout());
        add(tabbedPane, BorderLayout.CENTER);
        add(label, BorderLayout.SOUTH);
        label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10,
                                                        10));
    }

    void setLabel(String newText) {
        label.setText(newText);
    }

    private JPanel createSimpleDialogBox() {
        final int numButtons = 1;
        JRadioButton radioButtons =null;
        final ButtonGroup group = new ButtonGroup();

        JButton showItButton = null;

        final String defaultMessageCommand = "default";
        final String yesNoCommand = "yesno";
        final String yeahNahCommand = "yeahnah";
        final String yncCommand = "ync";

        radioButtons = new JRadioButton("OK (in the L&F's words)");
        radioButtons.setActionCommand(defaultMessageCommand);
        radioButtons.setMnemonic(KeyEvent.VK_O);

        group.add(radioButtons);

        radioButtons.setSelected(true);

        showItButton = new JButton("Show it!");
        showItButton.setMnemonic(KeyEvent.VK_H);
        showItButton.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e) {
                    String command =
                        group.getSelection().getActionCommand();

                    // ok dialog
                    if (command == defaultMessageCommand) {
                        JOptionPane.showMessageDialog(frame,
                                                      "Hello...");
                    }
                    return;
                }
            });

        return createPane(simpleDialogDesc + ":", radioButtons,
                          showItButton);
    }


    private JPanel createPane(String description,
                              JRadioButton radioButtons,
                              JButton showButton) {

        JPanel box = new JPanel();
        JLabel label = new JLabel(description);

        box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
        box.add(label);

        box.add(radioButtons);


        JPanel pane = new JPanel();
        pane.setLayout(new BorderLayout());
        pane.add(box, BorderLayout.NORTH);
        pane.add(showButton, BorderLayout.SOUTH);
        return pane;
    }
}

class MyJTabbedPane extends JTabbedPane {
    public void addTab(String title, Icon icon, Component component,
                       String tip, int mnemonic, int index) {
        this.add(component, index);
        this.setTitleAt(index, title);
        this.setMnemonicAt(index, mnemonic);
        this.setToolTipTextAt(index, tip);
    }
}

class dialogs_main {
    public static void main(String []args) {
        JFrame frame = new JFrame("Dialogs Test");
        Container c = frame.getContentPane();

        c.add(new Dialogs(frame));

        frame.pack();
        frame.setVisible(true);
    }
}

Comments
EVALUATION Similar bugs were fixed in 6u4 - 6547951, 6465038.
28-09-2007

EVALUATION MToolkit is dropped in JDK7 and is of almost no support in JDK6, so I'm closing this change request as 'Will Not Fix'.
27-09-2007