ОП отметил, что setSelected
не работал, и ему нужно было вызвать activateFrame
вручную.Это похоже на проблему, с которой я столкнулся с GTKLookAndFeel
.У меня было приложение, которое было настроено на использование setSelected
, чтобы в конечном итоге вызвать activateFrame
.Работал нормально с Windows и Mac родной внешний вид;activateFrame
будет вызываться автоматически.
В Ubuntu система выбрала LaF GTKLookAndFeel
, и по какой-то причине это не вызывало activateFrame
.Похоже, что setSelected
не выдавал ошибку или что-то в этом роде, просто не удосужился вызвать activateFrame
, как это делают другие LaF.Я думаю, что это проблема совместимости GTKLookAndFeel
.
В конце концов, я наказал это и просто запретил GTKLookAndFeel
, заменив его на Metal
.Motif
также имел совместимое поведение (но это так уродливо ...).Код выглядит примерно так:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if (UIManager.getLookAndFeel() instanceof com.sun.java.swing.plaf.gtk.GTKLookAndFeel)
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());