Zamiana obrazków w JLabel

Zamiana obrazków w JLabel
SA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:2
0

Witam wszystkich.

Wpierw przedstawię kod, a następnie wytłumaczę, w czym leży problem.

Posiadam klasę, która jest rozszerzeniem JFrame'a. W jej konstruktorze znajduje się
taki fragment mający na celu wyświetlić obrazek :

Kopiuj
try
        {
            repaint = ImageIO.read(new File(ReturnPageName(0)));
        }catch (IOException e) {
        }
        image = new ImageIcon(repaint);
        imageLabel = new JLabel();
        imageLabel.setIcon(image);
        imageLabel.setVisible(true);
        add(imageLabel);
        setUndecorated(true);
        setVisible(true);
        setSize(1024, 600);
 

W przypadku naciśnięcia określonego klawisza ma się wykonać poniższy fragment :

Kopiuj
 
SetMenuImage(1);
                            try {
                                Thread.sleep(10000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
SetMenuImage(2);

Gdzie SetMenuImage to :

Kopiuj
 
 public void SetMenuImage(int number)
{
try
        {
            repaint = ImageIO.read(new File(ReturnPageName(number)));
        }catch (IOException e) {
        }
        Graphics g = repaint.createGraphics();
// do dodawania obrazków oraz tekstu do tła
        g.setFont(font);
        g.setColor(black);

        image = new ImageIcon(repaint);
        imageLabel.setIcon(image);
        revalidate();
        repaint();
}

Problem polega na tym, że mimo iż program wchodzi do funkcji SetMenuImage(1) po naciśnięciu klawisza, to nowy obrazek się nie pokazuje. Po odczekaniu 10 sekund pokazuje się prawidłowo obrazek z SetMenuImage(2). Jeżeli oba te wywołania zamienię miejscami, to zawsze wykona się (pokaże) tylko i wyłącznie to drugie. Jaka może być przyczyna takiej
sytuacji ?

Z góry dziękuję za odpowiedź,

Pozdrawiam,
Sarachiel

edytowany 1x, ostatnio: bogdans
bogdans
!Umieszczaj kod w znacznikach <code=java></code>
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

Zamiast usypiać wątek utwórz timer, który po 10 sekundach wywoła SetMenuImage(2). Kod metody SetMenuImage jest kiepski, pomyśl co się wydarzy gdy nie powiedzie się odczyt pliku graficznego.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
SA
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:2
0

Dzięki za informację, poprawię kod, by dalej się wykonywał jedynie w sytuacji gdy ładowanie się powiedzie. Problem rozwiązałem wrzucając drugie wywołanie funkcji do SwingWorkera.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.