Java - načtení obrázku v GUI
Vykreslení obrázku v grafickém uživatelském rozhraní v komponentě JScrollPane
Načtení obrázku do rámce v grafickém rozhranní není tak úplně triviální, jak by se mohlo zdát. Problém je, že komponentě nejde říct přímo, jaký obrázek vykreslit. Musí se napsat třída implementující JPanel, vytvořena její instance a přidána jako obsah do nějakého kontejneru, třeba ScrollPane. Takže kroky sou následující:
- Vytvořit třídu pro vykreslení, rozšiřující JPanel
- Vytvořit referenci na soubor obrázku
- Načíst obrázek do paměti
- Vytvořit instanci naší třídy
- Přiřadit ji do ScrollPane
1) Třída rozšiřující JPanel
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class KresliciPanel extends JPanel
{
Image img;
public KresliciPanel (Image img)
{ this.img = img; }
public void paintComponent (Graphics g) {
super.paintComponent (g);
int imgX =0;// obrazek ma rozmer stejny jako ramec
int imgY =0;// vlozime ho tedy do rohu
//vykreslime
g.drawImage (img, imgX, imgY, this);
}
}
Z kódu je vidět, že třída je opravdu jednoduchá, jak jen to jde.
2) Reference na soubor
File f = new File("obrazek.jpg");
3) Načíst obrázek do paměti
Vytvoříme instanci BufferedImage a pomocí třídy ImageIO ji naplníme obrázkem.
BufferedImage bimage = ImageIO.read(f);
4) Instance naší třídy
Ve třídě gui, nejlépe v metodě volané při nějaké akci,
třeba kliknutí na tlačítko, vytvoříme objekt naší třídy
KresliciPanel kp = new KresliciPanel(bimage.getScaledInstance(
JScrollPane.getWidth(), JScrollPane.getHeight(),
Image.SCALE_SMOOTH));
Kde bimage je náš obrázek v paměti, getScaledInstance() vytvoří náhled velký stejně jako je náš zobrazovací panel,a Image.SCALE_SMOOTH je metoda transformace obrázku při zmenšování.
5) Zobrazení obrázku v panelu
Poslední krok, nutný pro vykreslení obrázku v GUI je jeho
přiřazení do JscrollPane. Kód je jednoduchý
JScrollPane.add(kp);
Po tomto kroku by již měl být obrázek zobrazen, pokud nenastal problém například s referencí na soubor.
Možná by bylo dobré ještě podotknout kde se veme ten JScrollPane, prostě ho v návrhu rozložení grafiky přetáhneme z panelu komponent na místo kam chceme,a upravíme mu rozměry.
Závěr
Věřím že existuje mnoho lepších praktik, ale když jsem hledal
jakoukoli jednoduchou funkční, zabralo to dost času. Tento návod snad
poradí do začátku, jak na to.