Получают ли диалоги Swing Dialogs фокусироваться на открытии?JAVA

Программисты JAVA общаются здесь
Anonymous
Получают ли диалоги Swing Dialogs фокусироваться на открытии?

Сообщение Anonymous »

Получите ли качание модальные диалоги с фокусом на открытии? < /p>
Они должны. Тем не менее, сообщение журнала никогда не напечатано, если вы выполняете демонстрацию ниже. Почему?

Код: Выделить всё

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class SimpleDialogDemo {

public static void main(String[] args) {
JFrame frame = new JFrame("Simple dialog demo");
Container mainPanel = createMainPanel(frame);
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}

private static Container createMainPanel(Frame owner) {
JPanel panel = new JPanel();
panel.add(createOpenButton(owner));
return panel;
}

private static Component createOpenButton(Frame owner) {
JButton button = new JButton("Open");
button.addActionListener(e -> createDialog(owner).setVisible(true));
return button;
}

private static Component createDialog(Frame owner) {
JDialog dialog = new JDialog(owner);
dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
dialog.setLocationRelativeTo(dialog.getOwner());
dialog.setContentPane(createDialogMainPanel());
dialog.pack();

dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowGainedFocus(WindowEvent e) {
System.out.println("Dialog gained focus");
}
});
return dialog;
}

private static Container createDialogMainPanel() {
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(150, 100));
return panel;
}
}
< /code>
Практическая актуальность для нашего проекта - одна из сложных ошибок. Он включает в себя ключевые события, все еще обрабатываемые базовой панелью диалога даже после того, как диалог отображается. Отладка выявила, что фокус по какой -то причине все еще принадлежит дочернему компоненту панели (как показано FocusManager.getCurrentManager (). Gefocusowner () 
).
Использование Java 8, Windows 10.

Подробнее здесь: https://stackoverflow.com/questions/795 ... on-opening

Вернуться в «JAVA»