JDialog не ориентирован на OSX, когда Java не на вершинеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JDialog не ориентирован на OSX, когда Java не на вершине

Сообщение Anonymous »

Мой JDialog не фокусируется, когда программа Java не находится впереди в OSX. Как мне этого добиться?

У меня есть следующая тестовая программа, иллюстрирующая сценарий (внизу), работающая с использованием javac Test.java && java Test из терминала.

Когда терминал выводит сообщение «Начало сначала», он переключает фокус на программу Java. Снимаю фокус с запущенной Java-программы, нажав на терминал (или какую-то другую программу). Второй JDialog, отображаемый с текстом «Второй тест», не будет сфокусирован. Это то же самое, даже если я установил диалог.setAlwaysOnTop(true);

JDialog с текстом «Второй тест» правильно фокусируется, когда я выхожу из Java программа остается наверху после появления сообщения «Начало первым» (т. е. не нажимает где-нибудь еще, чтобы запущенная Java-программа оказалась сверху).

Обратите внимание, что моя Java-программа этого не делает. иметь пользовательский интерфейс Swing. Он работает в фоновом режиме и открывает JDialog для ввода данных пользователем. Это отлично работает как в Windows, так и в Linux (созданный JDialog фокусируется независимо от того, какое приложение находится в фокусе в данный момент).

public class Test {
public static void main(String[] args) throws Exception {

Thread t = new Thread() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
launch("First test");
}
});
}
};
Thread t2 = new Thread() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
launch("Second test");
}
});
}
};

t.start();
System.out.println("Started first");
Thread.sleep(5000);
System.out.println("Started second");
t2.start();
}

private static void launch(String title) {
System.out.println("Showing");
System.out.println(Thread.currentThread().getName());

final JDialog dialog = new JDialog(null, "Test", ModalityType.APPLICATION_MODAL);
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

final JTextField searchBar = new JTextField(title);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(searchBar);
dialog.add(panel);
dialog.pack();
dialog.setLocationRelativeTo(null);
searchBar.requestFocus();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
searchBar.requestFocus();
}
});
dialog.setVisible(true);
System.out.println("Result is " + searchBar.getText());
}
}


Подробнее здесь: https://stackoverflow.com/questions/586 ... not-on-top
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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