Если вы хотите «обновить» JPanel, тогда вы должны вызвать repaint (), который вызовет ваш paintComponent (). Это должно устранить вашу проблему:
public void setImage(BufferedImage bi)
{
image = bi;
EventQueue.invokeLater(new Runnable()
{
public void run()
{
repaint();
}
});
}
Хорошая практика обновления и изменения GUI с помощью EDT. Heres больше информации об EDT, если вам интересно:
Как работает поток отправки событий?
repaint
не требуется вызванный из EDT. Если вы меняете GUI, например, устанавливаете текст в JLabel, он должен быть внутри EDT. Heres больше информации о том, что можно назвать вне EDT (любезно предоставлено nIcE cOw):
Попробуйте это:
for i, item in enumerate(marketId_list):
if i>0 and marketId_list[i] != marketId_list[i-1]:
test()