Jdialog не фокусируется на IE9 - PullRequest
1 голос
/ 03 апреля 2012

Я звоню 2 jDialog спина к спине из апплета. Как только я выбираю опцию в первом диалоговом окне и нажимаю кнопку ОК, окно апплета становится сфокусированным, а второе диалоговое окно теряет фокус.

Проблема возникает только в IE и отлично работает в Firefox и Chrome. Пожалуйста, фрагмент кода. (хотя настоящая проблема в моем полном коде возникает только в IE9, я не уверен, почему это не работает в IE8 в SSCCE)

public class SampleApplet extends Applet{

protected JButton countryButton = new JButton("Select");

public synchronized void init()
{
    this.setBounds(new Rectangle(350,350));
    this.add(countryButton);


    countryButton.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent arg0) {
            getCountries();
            getCountries();             
        }

    });
}

protected void getCountries() {
    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    JComboBox CountriesCombo = new JComboBox();
    CountriesCombo.addItem("India");
    CountriesCombo.addItem("Japan");
    panel.add(CountriesCombo, gbc);

    JOptionPane     optionPane  = new JOptionPane(panel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);

    final JDialog   dialog      = optionPane.createDialog(panel, "Select Countries");
    dialog.setModal(true);

    dialog.addWindowListener ( new WindowAdapter ()
    {
        public void windowOpened ( WindowEvent e )
        {
            dialog.requestFocus ();
        }
    });
    dialog.pack();
    dialog.setLocationRelativeTo(null);
    dialog.setVisible(true);
}

}

HTML код:

<html>
<head>
    <title>Sample Code</title>
</head>
<body>
    <applet code="SampleApplet.class" width="350" height="350">
    </applet>

Могу ли я получить помощь по этому вопросу.

1 Ответ

0 голосов
/ 03 апреля 2012

Возможно, что это поведение зависит от браузера, в котором вы запускаете апплет (и, кажется, вы это доказали), поэтому я бы предложил вам попробовать вызывать requestFocus () и requestFocusInWindow () для диалога (или компонента внутри него) ), чтобы перевести фокус в диалоговое окно.

Еще раз - если вы запрашиваете фокус перед тем, как открыть диалоговое окно (перед setVisible (true)) курса, оно завершится неудачей, поскольку диалоговое окно еще не показано. Если вы вызываете его ПОСЛЕ метода setVisible (true) - если ваш диалог (или OptionPane) является модальным - он будет выполняться только тогда, когда диалог закрыт, поэтому он также не имеет смысла. Вы должны добавить WindowListener в ваш диалог и запросить фокус в диалоге после его открытия.

Проверьте этот пример:

public static void main ( String[] args )
{
    // Modal dialog
    final JDialog dialog = new JDialog (  );
    dialog.setModal ( true );

    // Adding listener
    dialog.addWindowListener ( new WindowAdapter ()
    {
        public void windowOpened ( WindowEvent e )
        {
            dialog.requestFocus ();
        }
    } );

    // Displaying dialog
    dialog.setVisible ( true );
}

Тем не менее, dialog.requestFocus () здесь представляет собой платформо-зависимый вызов, который может не фокусировать / выдвигать ваш диалог поверх других открытых окон. Во всех версиях Windows он должен работать нормально.

Также вы можете попробовать использовать dialog.toFront () - это должно открыть диалоговое окно и перенести в него фокус.

...