2010-11-19 2 views
0

Итак, у меня есть JFrame, внутри которого у меня есть JScrollPane и внутри JScrollPane у меня есть JPanel. У меня есть кнопка мыши, которая изменяет JPanel внутри JScrollPane. Код в слушателя мыши:Обновление представления только после изменения размера JFrame

@Override 
    public void mouseClicked(MouseEvent arg0) { 

      searchResult.updateInfo(); 

     } 

Метод updateInfo добавляет кучу JPanel в SearchResult JPanel. После нажатия кнопки, связанной с этим прослушивателем, ничего не происходит, но когда я изменяю размер JFrame, он обновляет представление. Почему это?

Я пытался перекрасить JFrame, но это не решает мою проблему

ответ

2

После добавления/удаления компонентов из видимого GUI вам нужно чтобы сообщить панели о компоновке компонентов, поэтому предпочтительный размер можно пересчитать. Вам нужно добавить:

searchResult.revalidate(); 
searchResult.repaint(); // sometimes needed 

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

+0

Это связано с тем, что LayoutManager запрашивается только при первом представлении о том, как компоновать компоненты. Вы должны сказать компоненту, чтобы попросить LayoutManager сделать это снова, вызвав 'revalidate()', как сказано здесь. – ZeissS

+0

спасибо! это решило мою проблему – aherlambang

0

сделать searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); , если он не работает сделать, как этот searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); searchResult.repaint();

+0

извините, я просто обновляю свой код выше .. получается, что я действительно хочу в моей мыши. Я просто хочу вызвать updateInfo на searchResult .. этот метод, как я объяснял выше, просто добавляет кучу панели tp searchResult JPanel – aherlambang

+0

без проблем , важно, чтобы у вас была проблема с ур, удачи. – palAlaa

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