Я в процессе тестирования моего Java-приложения на Mac, и у меня возникла очень странная проблема. Флажки, которые появляются в модальном диалоге, отображаются неправильно, хотя немодальные диалоги работают нормально.
Например, скажем, у меня есть окно с 2-мя переключателями. Когда открывается диалоговое окно, выбирается первый. Когда я нажимаю на вторую кнопку, она внезапно выглядит так, как будто выбраны оба. Если щелкнуть где-нибудь еще в диалоговом окне, рендеринг будет исправлен, и отобразится только выбранная кнопка.
Следующий код воспроизводит это для меня:
package mactest;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Main {
public static void main(String[] args) {
boolean modal = false;
if(args.length > 0) {
modal = args[0].toLowerCase().equals("true");
}
TestDialog dlg = new TestDialog(new Frame(), modal);
dlg.setVisible(true);
}
private static class TestDialog extends Dialog {
private Checkbox cb1;
private Checkbox cb2;
private CheckboxGroup cbg;
public TestDialog(Frame owner, boolean modal) {
super(owner);
cbg = new CheckboxGroup();
cb1 = new Checkbox("One", true, cbg);
cb2 = new Checkbox("Two", false, cbg);
this.setLayout(new FlowLayout());
this.add(cb1);
this.add(cb2);
this.setModal(modal);
this.pack();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
TestDialog.this.setVisible(false);
System.exit(0);
}
});
}
}
}
Если я назову это так:
java -cp MacTest.jar mactest.Main false
диалог не модальный и все работает нормально. Однако, если я скажу, что это модально:
java -cp MacTest.jar mactest.Основно верно
тогда возникают проблемы с рендерингом.
Я испробовал все возможные уловки, чтобы попытаться решить проблему (сделать недействительными, doLayout, запрос фокуса, явную настройку состояния каждой кнопки, когда она выбрана и т. Д.), Но пока единственное, что я могу Я пришел к выводу, что это делает диалог не модальным. К сожалению, это не вариант в моем приложении.
В случае, если это имеет значение, это на MacBook под управлением OS X 10.5 под управлением Java 1.5.0_16.