Witam!
Jestem początkujący. W ramach ćwiczeń chciałbym stworzyć przeglądarkę zdjęć w javie ale nie jako aplet. Po wybraniu jakiegoś zdjęcia z katalogu powinna być możliwość nawigacji klawiszami poprzednie, nastepne dla wszystkich pozostałych zdjęć w katalogu. Nie wiem jakich klas i rozwiązań użyć aby to zrealizować. Teraz mam możliwość wczytywania pojedyńczych zdjęć. Denerwuje mnie używanie tej metody:
public void paintComponent(Graphics g)
{
Image obrazek1 = new ImageIcon(sciezka.getImage();
g.drawImage(obrazek1, 0, 0, this);
}
Czy nie ma innego sposobu? tutaj za każdym razem kiedy chcę wyświetlić na panelu nowy obrazek trzeba tworzyć nowy obiekt aby przesłonić metodę paintComponent(). Czy to dobre zozwiązanie? Poza tym stary obrazek jest pod spodem i nowe nakładają się na niego.
Tutaj cały kod:
import java.awt.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.swing.JFileChooser;
public class TestGUI
{
public static void main(String[] args)
{
TestGUI fotoAlbum = new TestGUI();
fotoAlbum.konfigurujGui();
}
public void konfigurujGui()
{
JFrame Ramka = new JFrame("Test GUI");
Ramka.setSize(300, 200);
Ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Ramka.getContentPane().setLayout(new BorderLayout());
//panel z przyciskami sterujacymi
JPanel panelPrzyciskow = new JPanel();
JButton btnPrew = new JButton("prewious");
btnPrew.addActionListener(new prewListener());
JButton btnOpen = new JButton("Wybierz plik");
btnOpen.addActionListener(new openListener(Ramka));
JButton btnNext = new JButton("Next");
btnNext.addActionListener(new nextListener());
panelPrzyciskow.add(btnPrew);
panelPrzyciskow.add(btnOpen);
panelPrzyciskow.add(btnNext);
Ramka.add(panelPrzyciskow, BorderLayout.SOUTH); //dodaj p.przyciskow na poludnie ramki
Ramka.setVisible(true);
}
}
class Obraz_Panel extends JPanel {
String sciezka=new String("c:/img/tlo.jpg");
public String getSciezka() {
return sciezka;
}
public void setSciezka(String sciezka) {
this.sciezka = sciezka;
}
private BufferedImage image;
public Obraz_Panel(String sciezka) {
super();
this.sciezka=sciezka;
File imageFile = new File(sciezka);
try {
image = ImageIO.read(imageFile);
} catch (IOException e) {
System.err.println("Blad odczytu obrazka");
e.printStackTrace();
}
Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
setPreferredSize(dimension);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, 0, 0, this);
}
}
// klasy zdarzen dla komponentow
class openListener implements ActionListener{
JFrame ramka;
openListener(JFrame ramka){
this.ramka=ramka;
}
public void actionPerformed(ActionEvent zdarzenie)
{
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter(){
public boolean accept(File f){
String name = f.getName().toLowerCase();
return name.endsWith(".gif")
|| name.endsWith(".jpg")
|| name.endsWith(".jpeg")
|| f.isDirectory();
}
public String getDescription(){
return "Image files";
}
});
int r = chooser.showOpenDialog(chooser);
if(r == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getAbsolutePath().replace('\\','/');
System.out.println(name);
Obraz_Panel panelNaZdjecia = new Obraz_Panel(name);
ramka.add(panelNaZdjecia,BorderLayout.CENTER); //dodaj panel wyswietlajacy zdjecia
ramka.setVisible(true);
}
}
}
class nextListener implements ActionListener{
public void actionPerformed(ActionEvent zdarzenie){
}
}
class prewListener implements ActionListener{
public void actionPerformed(ActionEvent zdarzenie){
}
}