© 2013 All rights reserved.
5

Java: jednoduchý prohlížeč obrázků #2

V minulém díle jsme si vytvořili první část prohlížeče, která umožňuje výběr adresáře a spuštění presentace. V tomto díle navážeme na to co je již hotové a zaměříme se na zobrazování obrázků.

V minulém díle jsme si vytvořili třídu pro výběr adresáře s fotografiemi, jejich načtení a zobrazení možnosti spuštění presentace.

V tomto následujícím díle si vytvoříme další třídu, ve které si uděláme zobrazování fotografií s možností přepínání se mezi nimi a navíc možností spuštění presentace, která bude automaticky přepínat načtené fotografie.

iv

Jako první začneme grafickým rozhraním, ve kterém budeme muset vytvořit některé z tlačítek. Jak jsem napsal, třída bude umožňovat přepínání se mezi fotografiemi, tudíž budeme potřebovat 5 tlačítek. Jedno tlačítko pro přepnutí o fotografii vpřed, druhé pro přepnutí na konec a další dvě pro opačný posun.

Poslední tlačítko bude pro spuštění presentace. Nakonec si ještě vytvoříme Jlabel, ve kterém budeme zobrazovat informace na kolikáté fotografii z kolika se nacházíme.

Informace o zobrazené fotografii budeme zobrazovat například v titulku okna.

Konstruktor třídy bude mít jeden vstupní parametr, který bude obsahovat adresář s fotkami. Toto je zbytečné, protože budeme muset projít celý adresář znova, tak jsme si to již udělali v minulém díle, takže by stačilo předat si rovnou jenom adresy fotografií, ale napíši to tak z důvodu, že by někdo nečetl předchozí článek.

Do konstruktoru si tedy předáme adresář s fotografiemi, zavoláme metodu pro jejich načtení a vytvoříme si grafické okno, pro zobrazování fotografií:

Na začátku voláme metodu selectimages, která je obdobou metody z minulého dílu pro výběr všech fotografií. V této metodě nám vznikne pole fotografií.

Velikost okna se nastaví automaticky dle proměnných width a height, čili nebudeme řešit velikost okna, dle rozměrů fotografie. Tyto proměnné jsou globální.

Nyní je nutné si na všechny potřebné tlačítka přidat ActionListenery. Ve všech budeme volat metodu public void show_next_image(String imgname), která se bude starat o zobrazení následující nebo předchozí fotografie.

Všechny fotografie si načteme do pole LinkedList, ve kterém budou mít své indexy. O zobrazené fotografii nám bude rozhodovat globální proměnná position, ve které bude při zobrazení další fotografie přičítat a při zobrazení předchozí fotografie odečítat jedničku. Takto snadno rozhodneme, zda můžeme přepnout na další fotografii či nikoli jednoduchou kontrolou této proměnné:

V poli images jsou uloženy všechny fotografie. Po kliknutí na tlačítko se nám upraví proměnná position, která je na začátku nastavena na hodnotu 0 a ověří se, zda může být fotograrie zobrazena, zda existuje.

Nyní si musíme vytvořit metodu pro zobrazení fotograie. Metoda musí nejprve nastavit status label, ve kterém zobrazujeme uživateli informaci čísle aktuálně prohlížené fotografie, dále zobrazí fotografii a upraví titulek okna, do kterého napíše název fotografie.

Pro vykreslení fotografie využijeme knihovnu Graphics, která bude volat metodu paint( Graphics graphics );

Nakonec nám zbývá pouze vyřešit automatickou presentaci. O to se nám stará Jbutton s názvem presentation, který vytváří nové vlákno a spouští metodu run:

v této metodě pouze voláme metodu pro presentaci, ve které opět využijeme metodu show_next_image, jenom s tím rozdílem, že ji budeme volat automaticky po určité době:

Tím je hotový opravdu jednoduchý prohlížeč obrázků, který umožňuje výběr adresáře s fotografiemi a jejich následnou presentaci.

Na závěr si můžete prohlídnout celý zdrojový kód této třídy:

Comments are closed for this page

Metoda show() ze třídy java.awt.Window, kterou používáte pro zobrazení okna je od JDK verze 1.5 označena jako Deprecated. Místo ní je doporučeno používat metodu setVisible(true) ze stejné třídy.

Ale jinak velmi poučné. Díky za článek

K cemu slouzi tyto dva radky v metode show_next_image?

setSize(width + 1, height + 1);
setSize(width, height);

Vsiml jsem si, ze po jejich zakomentovani nedochazi k zobrazovani dalsich obrazku po stisku posunuvacich tlacitek.

Byl tam problem s tim, ze se obrazky neprekreslovaly, pokud se nezmenila velikost okna, nebo se s oknem nehnulo. Timto zpusobem je tato nechtena vlastnost velice jednoduse (spatne) potlacena

pro refresh obrazku je vhodne volat metodu repaint() a pokud to nejak jeste neni ono tak pak bych volal metodu validate().

Obě dvě varianty, co pisete jsem tusim vyzkousel, mozna to bylo starsi verzi javy, nevim, ale nefungovali tak, jak jsem potreboval.

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836