2011-01-26 2 views
1

Я создаю настраиваемый компонент качания (скорее, как практический мысленный эксперимент, чем что-либо еще).Пользовательский компонент качания: проблема с перерисовкой()

У меня проблемы с перекраской. Мой компонент имеет jtree, а jtable, а затем часть, которая полностью пользовательский окрашена (надеюсь в конечном итоге вполне MS проект-эск ​​ganttview)

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

Нечетная вещь заключается в том, что если я касаюсь ручка окна на jframe (так даже при изменении размера 1px) - это, похоже, заставляет полностью обновить, а компонент затем отображает правильно, и таблица посередине, и gannt on справа заполните дисплей.

Если я не делаю изменения размера, тогда переименование вызывается, когда узлы в дереве расширяются/свертываются, так как я вижу обновление ganttview, но оно, похоже, не расширяется, чтобы охватить всю высоту экран.

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

Мое утверждение состоит в том, что компонент знает, как правильно перерисовать(), поскольку он делает правильную вещь при изменении размера, но это должно вызывать специальное событие, которое заставляет более полно обновлять. Я пробовал различные комбинации update(), invalidate(), repaint(), но я не могу эмулировать полное repaint(), которое происходит при изменении размера родительской формы.

Screenshot

Спасибо, Ace

ответ

1

странного дела в том, что если я касаюсь ручки окна на JFrame (так даже 1px изменение размера) - это, кажется, чтобы заставить полное обновление и компонент затем отображается правильно,

При изменении размера рамки компоненты переутверждаются и перекрашиваются. Итак, где-то в вашем коде (где когда-либо обновляется представление таблицы и gannt) вам нужно добавить:

customComponent.revalidate(); 
customComponent.repaint(); 
+0

большое спасибо, это сделало трюк – phatmanace

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