2009-10-14 2 views
3

Как я могу заставить Frame repaint() сразу же после его максимизации или изменения размера?Перерисовать рамку при изменении размера?

Я не могу найти, какой метод вызывается, когда происходит эта конкретная операция. У меня есть куча графики, которые написаны графическими объектами в краске, и их ориентация зависит от обратной связи в реальном времени от getWidth() и getHeight(), но краска не вызывается, когда я максимизирую, только когда эти пиксели к сожалению.

ответ

15

Зарегистрировать ComponentListener:

final Component myComponent = makeTheFrameOrWhatever(); 
myComponent.addComponentListener(new ComponentAdapter() { 
    @Override 
    public void componentResized(ComponentEvent e) 
    { 
     myComponent.repaint(); 
    } 
}); 
+0

THANKYOU, WORKS !! – joef

+3

@joef: Нажмите «принятый» ответ, если это было то, что вам нужно. – OscarRyz

+3

У меня такое чувство, что я могу подождать, пока мировая экономика не подскочит, и на этом все равно не будет «принимать». –

1

Вам нужно копать дальше, потому что перекрасить() и краски(), безусловно, являются вызывается при изменении размера кадра - это единственный способ, рамка может вызвать его содержимое для окраски. Скорее всего, вы не видите, что repaint достигает вашего конкретного компонента в кадре, возможно, потому, что конкретный макет, который вы используете, не изменяется, если окно становится больше. Или, если у вас нет макета, тогда вы должны подклассом Frame и явно называть его подкомпонентами, потому что для этого нет менеджера макетов.

Обратите внимание, что краска выполняется повторно пока вы изменяете размер, а не только один раз после того, как вы отпустите кнопку мыши, может быть опция операционной системы.

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