One of the reason for UI not updating is if another process is occupying the
thread. Normally,
you should separate the UI processes from other long processes, by having one thread for the UI and another for long processes.
However, I think this may not be your problem.
One workaround I found, is by making certain component invisible, then make them visible again. This sort of refreshed/updated my UI. Which component to make invisible-then-visible? Try the component involved. If it doesnt work, try on its immediate container; and try further up until it works or it doesnt make sense anymore, at which, this technique wouldnt be useful anymore.