2016-11-30 2 views
0

У меня есть приложение Swing с JSplitPane, и я хочу получить ширину JSplitPane, как только окно будет максимально или восстановлено. Но я не могу получить правильное значение, оно всегда возвращает предыдущую ширину JSplitPane. Не изменяется ширина после состояния окна.Swing windowStateChanged listener возвращает предыдущие значения свойств компонентов

Я знаю, что я должен проверить, используя evt.getNewState() для NORMAL и MAXIMIZED_BOTH, но это не имеет значения.

addWindowStateListener(new java.awt.event.WindowStateListener() { 
    public void windowStateChanged(java.awt.event.WindowEvent evt) { 
     System.out.println(jsp.getWidth()); 
    } 
}); 

Это печатает 1812 если они восстановлены и 1120 если развернуто. Я также попробовал это с несколькими другими компонентами и получил тот же результат. Как я могу решить эту проблему?

ответ

1

Я нашел свое решение этой проблемы, используя addComponentListener() и обработав событие componentResized для JFrame. Все субкомпоненты обновляются в этом случае, поэтому я смог получить новую ширину и выполнить свою задачу. Все еще не идеально, но достаточно близко. См. How to Write a Component Listener для получения дополнительной информации.

Смежные вопросы