www.www.zaachi.com »  Blog/Java  »  Java: jednoduchý prohlížeč obrázků #1

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



Ve dvou dílech si vytvoříme jednoduchý prohlížeč obrázků, který bude umožňovat načíst obrázky z určitého adresáře a vykreslit je nebo spustit jejich presentaci.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

V tomto prvním díle si vytvoříme jednoduchý formulář, ve kterém budeme mít možnost vybrat adresář s obrázky.

Po výběru adresáře program zjistí, kolik tento adresář obsahuje fotografií, inoformaci uživateli zobrazí a nabídne spuštění presentace.

Formulář (GUI)

Pro skupinu programů, které si budeme postupně dělat, jsem si vytvořil GUI, do kterého budu tyto programy načítat přes InternalFrames. Z toho bude taky vyplývat struktura programu.

InternalFrame

V ovládacím okně prohlížeče bude, jak jsem napsal, možnost výběru adresáře s fotografiemi. Po jeho výběru se zobrazí informace o nalezených fotografiích a zobrazí se možnost spuštění presentace.

Pro tyto operace si vytvoříme okno, které bude obsahovat:

  • Adresu k obrázkům – editable bude nastavena na false a zobrazí se v ní adresa až po výběru adresáře.
  • Tlačítko procházet – po kliknutí se spustí metoda pro procházení adresářů.
  • Tlačítko pro spuštění presentace – Visible bude nastaveno na false, přenastaví se na true až po nalezení obrázků.
  • Textové pole pro výpis informací

Vytvoříme si třídu SearchImages a například do konstruktoru umístíme formulář:

 
public class SearchImages extends JInternalFrame {

	public JButton search;
	public JTextField file_url;
	public JLabel num_of_images = new JLabel();
	public JButton send;
	
	public SearchImages() {
		super("Prohlížeč obrázků", false, true, false, true);
		setSize(400, 120);
		FlowLayout fl = new FlowLayout();
		Container cont = getContentPane();
		cont.setLayout(fl);
		
		search = new JButton("Procházet");
		search.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				search_method();
			}
		});
		
		send = new JButton("Spustit preentaci");
		send.setVisible(false);
		send.setPreferredSize(new Dimension(380, 20));
		
		cont.add(new JLabel("Obrázky:"));
		file_url = new JTextField(20);

		file_url.setEditable(false);
		cont.add(file_url);
		cont.add(search);
		cont.add(send);
		cont.add(num_of_images);
		show();
	}
}

Takto vytvořená třída vytiskne nefunkční formulář, ve kterém bude needitovatelný TextField a tlačítko pro procházení adresářů.

U tlačítka je přímo vytvořen actionListener, ve kterém se volá metoda search_method(). Tato metoda bude sloužit pro vytvoření dialogu k hledání adresáře.

JFileChooser

Pro hledání použijeme JfileChooser, který je pro tuto událost přímo vytvořený:

 
public JFileChooser chooser;

public void search_method() {
	chooser = new JFileChooser();
	chooser.setCurrentDirectory(new java.io.File("."));
	chooser.setDialogTitle("Vyberte adresář s fotkama");
	chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

	chooser.setAcceptAllFileFilterUsed(false);

	if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
		selected(String.valueOf(chooser.getSelectedFile()));
	} else {
		selected("");
	}
}

Po výběru adresáře se spouští metoda selected, která nastaví textové pole s adresou:

 
public void selected(String file) {
	file_url.setText(file);
	setlabel(file);
}

Navíc metoda volá další metodu, tentokrát setlabel().

Hledání obrázků

SetLabel prohledá vybraný adresář a najde v něm všechny soubory typu .jpg nebo .png. Pro jejich hledání použijeme velmi jednoduchou funkci endsWith(), která umožňuje porovnání podle konce řetězce.

Seznam obrázků budeme ukládat Listu:

 
List images = new LinkedList();

Po nalezení obrázků vytiskneme uživateli informace o počtu nalezených obrázků a v případě nalezení zobrazíme tlačítko pro spuštění presentace.

Vstupní parametr je adresář, ve kterém budeme obrázky hledat. Tento adresář projdeme a všechny soubory, které obsahuje zkontrolujeme na koncovku:

 
public void setlabel(String label_text) {
	images.clear();
	String directory = label_text;

	File dir = new File(label_text);
	String[] files;
	files = dir.list();

	for (int i = 0; i < files.length; i++) {
		File f;
		f = new File(dir, files[i]);
		if (f.isDirectory()) {
			;
		} else {
			if (files[i].toLowerCase().endsWith(".jpg")
					|| files[i].toLowerCase().endsWith(".png"))
				images.add(files[i]);
		}
	}

	if (images.size() == 0) {
		num_of_images.setText("Nebyli nalezeny žádné obrázky.");
		send.setVisible(false);
		return;
	} else if (images.size() == 1) {
		num_of_images.setText("Byl nalezen jeden obrázek.");
	} else if (images.size() < 5) {
		num_of_images.setText("Byly nalezeny "
				+ String.valueOf(images.size()) + " obrázky.");
	} else {
		num_of_images.setText("Bylo nalezeno "
				+ String.valueOf(images.size()) + " obrázků");
	}

	send.setVisible(true);
}

Pokud jsou nalezeny obrázky, odkryje se tlačítko a vypíší se informace pro uživatele.

V příští části si naprogramujeme třídu pro zobrazování těchto obrázků. Bude umožňovat přepínání se mezi obrázky a spuštění presentace obrázků.

Nakonec si ještě můžete prohlídnout celý dnešní kód:

 
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class SearchImages extends JInternalFrame {

	public JFileChooser chooser;

	public JButton search;

	public String choosertitle;

	public JTextField file_url;

	List images = new LinkedList();

	public JLabel num_of_images = new JLabel();

	public java.awt.List seznam;

	public JButton send;

	public SearchImages() {
		super("Prohlížeč obrázků", false, true, false, true);
		setSize(400, 120);
		FlowLayout fl = new FlowLayout();
		Container cont = getContentPane();
		cont.setLayout(fl);

		search = new JButton("Procházet");
		search.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				search_method();
			}
		});

		send = new JButton("Spustit preentaci");
		send.setVisible(false);
		send.setPreferredSize(new Dimension(380, 20));

		cont.add(new JLabel("Obrázky:"));
		file_url = new JTextField(20);

		file_url.setEditable(false);
		cont.add(file_url);
		cont.add(search);
		cont.add(send);

		cont.add(num_of_images);
		show();
	}

	public void search_method() {
		chooser = new JFileChooser();
		chooser.setCurrentDirectory(new java.io.File("."));
		chooser.setDialogTitle("Vyberte adresář s fotkama");
		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

		chooser.setAcceptAllFileFilterUsed(false);

		if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
			selected(String.valueOf(chooser.getSelectedFile()));
		} else {
			selected("");
		}
	}

	public void selected(String file) {
		file_url.setText(file);
		setlabel(file);
	}

	public void setlabel(String label_text) {
		images.clear();
		String directory = label_text;

		File dir = new File(label_text);
		String[] files;
		files = dir.list();

		for (int i = 0; i < files.length; i++) {
			File f;
			f = new File(dir, files[i]);
			if (f.isDirectory()) {
				;
			} else {
				if (files[i].toLowerCase().endsWith(".jpg")
						|| files[i].toLowerCase().endsWith(".png"))
					images.add(files[i]);
			}
		}

		if (images.size() == 0) {
			num_of_images.setText("Nebyli nalezeny žádné obrázky.");
			send.setVisible(false);
			return;
		} else if (images.size() == 1) {
			num_of_images.setText("Byl nalezen jeden obrázek.");
		} else if (images.size() < 5) {
			num_of_images.setText("Byly nalezeny "
					+ String.valueOf(images.size()) + " obrázky.");
		} else {
			num_of_images.setText("Bylo nalezeno "
					+ String.valueOf(images.size()) + " obrázků");
		}

		send.setVisible(true);
	}

}

 

 


linkuj topclanky
Komentáře (0)

Autor: Zaachi
Publikováno: 28.1.2008 01:01:15


Mohlo by vás zajímat:
Java: jednoduchý prohlížeč obrázků #2
Java: jednoduchý internetový prohlížeč
Java: Jednoduchý česko-anglický slovník
Java: Twitter sender – jednoduchý program pro odesílání zpráv
TOPLIST.cz
rss coments img img img