📄 OpenFolderPictures.java .java dosyası
⬇️ İndir
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.event.MouseInputAdapter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class OpenFolderPictures {
public static JFrame frame;
public static JPanel anaPanel = new JPanel();
public static JPanel merkezPanel = new JPanel();
public static int anaPanelGenislik;
public static int anaPanelYukseklik;
public static int resimGenislik;
public static int resimYukseklik;
public static int x; // merkezPanel'in koordinatları
public static int y;
public static BufferedImage resim;
public OpenFolderPictures() throws IOException {
resim = ImageIO.read(new File("src/images/nehir.png")); // açılış resmi.
frame = new JFrame("Frame Merkezinde Resim Göster | Java Blackboard [151]");
frame.setLayout(null);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenu picturesMenu = new JMenu("Pictures"); // JMenuBar'a ekliyoruz.
JMenuItem openItem = new JMenuItem("Open...");
JMenuItem saveItem = new JMenuItem("Save");
JMenuItem exitItem = new JMenuItem("Exit");
JMenu imagesFolderMenu = new JMenu("images"); // Pictures altında sağa açılır menü oluşturacak.
JMenu elmaFolderMenu = new JMenu("Elma"); // Pictures altında sağa açılır menü oluşturacak.
JMenu armutFolderMenu = new JMenu("Armut"); // Pictures altında sağa açılır menü oluşturacak.
JMenu freeFolderMenu = new JMenu("Free Pictures"); // Pictures altında sağa açılır menü oluşturacak.
// images Folder.
String[] imagesDosyalari = resimDosyaListesi("images");
JMenuItem[] itemDosyaListesi = new JMenuItem[imagesDosyalari.length];
for (int i = 0; i < imagesDosyalari.length; i++) {
System.out.println(i + ". [ images ] " + imagesDosyalari[i]);
itemDosyaListesi[i] = new JMenuItem(imagesDosyalari[i]);
imagesFolderMenu.add(itemDosyaListesi[i]);
// Her bir menü öğesine ActionListener ekleyin
itemDosyaListesi[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Seçilen resmi yükle
resim = ImageIO.read(new File("src/images/" + e.getActionCommand()));
anaPaneliGuncelle(resim);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
// elmaPix Folder
String[] elmaPixDosyalari = resimDosyaListesi("elmaPix");
JMenuItem[] elmaPixDosyaListesi = new JMenuItem[elmaPixDosyalari.length];
for (int i = 0; i < elmaPixDosyalari.length; i++) {
System.out.println(i + ". [ elmaPix] " + elmaPixDosyalari[i]);
elmaPixDosyaListesi[i] = new JMenuItem(elmaPixDosyalari[i]);
elmaFolderMenu.add(elmaPixDosyaListesi[i]);
// Her bir menü öğesine ActionListener ekleyelim
elmaPixDosyaListesi[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Seçilen resmi yükle
resim = ImageIO.read(new File("src/images/elmaPix/" + e.getActionCommand()));
anaPaneliGuncelle(resim);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
// armutPix Folder
String[] armutPixDosyalari = resimDosyaListesi("armutPix");
JMenuItem[] armutPixDosyaListesi = new JMenuItem[armutPixDosyalari.length];
for (int i = 0; i < armutPixDosyalari.length; i++) {
System.out.println(i + ". [ armutPix ] " + armutPixDosyalari[i]);
armutPixDosyaListesi[i] = new JMenuItem(armutPixDosyalari[i]);
armutFolderMenu.add(armutPixDosyaListesi[i]);
// Her bir menü öğesine ActionListener ekleyelim
armutPixDosyaListesi[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Seçilen resmi yükle
resim = ImageIO.read(new File("src/images/armutPix/" + e.getActionCommand()));
anaPaneliGuncelle(resim);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
// freePix Folder
String[] freePixDosyalari = resimDosyaListesi("freePix");
JMenuItem[] freePixDosyaListesi = new JMenuItem[freePixDosyalari.length];
for (int i = 0; i < freePixDosyalari.length; i++) {
System.out.println(i + ". [ freePix ] " + freePixDosyalari[i]);
freePixDosyaListesi[i] = new JMenuItem(freePixDosyalari[i]);
freeFolderMenu.add(freePixDosyaListesi[i]);
// Her bir menü öğesine ActionListener ekleyelim
freePixDosyaListesi[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
// Seçilen resmi yükle
resim = ImageIO.read(new File("src/images/freePix/" + e.getActionCommand()));
anaPaneliGuncelle(resim);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane
fileMenu.add(exitItem);
picturesMenu.add(imagesFolderMenu);
picturesMenu.add(elmaFolderMenu);
picturesMenu.add(armutFolderMenu);
picturesMenu.add(freeFolderMenu);
menuBar.add(fileMenu);
menuBar.add(picturesMenu);
// ComponentAdapter ile frame boyutu değiştiğinde tetiklenecek olayları dinliyoruz
frame.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
// Frame boyutu değiştikçe anaPanel'in boyutunu güncelleyelim
anaPanel.setSize(frame.getSize());
// Boyut değiştikten sonra değerleri alalim
anaPanelGenislik = anaPanel.getWidth();
anaPanelYukseklik = anaPanel.getHeight();
x = anaPanelGenislik/2-(resimGenislik/2);
y = anaPanelYukseklik/2-((resimYukseklik/2)+22); // +22 frame baslik + menuBar yükseklik
merkezPanel.setBackground(new Color(232, 74, 74));
merkezPanel.setLayout(null);
merkezPanel.setBounds(x, y, resimGenislik, resimYukseklik);
try {
merkezPanel.add(resimPaneli());
} catch (IOException e1) {
e1.printStackTrace();
}
anaPanel.add(merkezPanel);
}
});
// ActionListener ekleyerek "Open..." menü öğesine tıklanınca çağrılacak metod
openItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
resim = resimSec();
anaPaneliGuncelle(resim);
}
});
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Yöntem 1 -> Uygulamayi kapatir.
System.exit(0);
// Yöntem 2 -> belirli bir JFrame'in kapatılmasını sağlar.
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
});
anaPanel.setLayout(null);
anaPanel.setBackground(new Color(233, 245, 219));
frame.setJMenuBar(menuBar);
frame.getContentPane().add(anaPanel);
frame.setSize(960, 540); // 16:9
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.setVisible(true);
}
public static JPanel resimPaneli() throws IOException {
resimGenislik = resim.getWidth();
resimYukseklik = resim.getHeight();
JPanel resimPanel = new JPanel() {
public void paintComponent(Graphics grafik) {
grafik.drawImage(resim, 0, 0, null); // resmi orijinal haliyle gostermek için.
}
};
resimPanel.setBounds(0, 0, resimGenislik, resimYukseklik);
return resimPanel;
}
public static BufferedImage resimSec() {
JFileChooser fileChooser = new JFileChooser();
// ilk parametresi, dosya filtresinin açıklamasını temsil eder.
// "Yalnız: JPG JPEG PNG", Kullaniciya yönlendirme mesajı.
FileNameExtensionFilter dosyaTuru = new FileNameExtensionFilter("Yalnız: JPG JPEG PNG", "jpg", "jpeg", "png");
// kullanıcının sadece belirli türde dosyaları seçebilmesini sağlar.
fileChooser.setFileFilter(dosyaTuru);
// null parametresi, pencerenin merkezi konumda açılmasını sağlar.
int result = fileChooser.showOpenDialog(null);
// bir dosya seçeilirse, bu metodun dönüş değeri APPROVE_OPTION olur
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
try {
return ImageIO.read(selectedFile);
} catch (IOException e) {
e.printStackTrace();
// Hata durumunda null dönebiliriz veya isteğe bağlı olarak hata mesajı gösterebiliriz.
System.out.print("Bir hata oldu.");
}
// bir dosya seçmez veya pencere kapanırsa, dönüş değeri CANCEL_OPTION olur.
} else if(result == JFileChooser.CANCEL_OPTION) {
try {
resim = ImageIO.read(new File("src/images/secimYok.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
return resim;
}
// Kullanıcı dosya seçmezse veya bir hata oluşursa:
return null;
}
public static String[] resimDosyaListesi(String folderName) {
String dizinYolu = "";
if (folderName.equals("images")) {
dizinYolu = "src/images";
} else {
dizinYolu = "src/images/" + folderName;
}
File dizin = new File(dizinYolu);
// Dosya listesini tutmak için bir liste oluşturuyoruz
List<String> dosyaListesi = new ArrayList<>();
// önce dizin var mı yok mu kontrol edelim
if (dizin.exists() && dizin.isDirectory()) {
// Dizin içindeki dosyaları listeleyelim
File[] dosyalar = dizin.listFiles();
if (dosyalar != null) {
for (File dosya : dosyalar) {
// Dosyanın uzantısını alalım
String dosyaUzantisi = dosya.getName().toLowerCase();
if (dosya.isFile() && (dosyaUzantisi.endsWith(".jpg") || dosyaUzantisi.endsWith(".jpeg") || dosyaUzantisi.endsWith(".png"))) {
// Dosyanın uzantısı jpg, jpeg veya png ise listeye ekleyelim
dosyaListesi.add(dosya.getName());
}
}
}
}
// Listeyi diziye çeviriyoruz.
String[] dosyaDizisi = new String[dosyaListesi.size()];
dosyaDizisi = dosyaListesi.toArray(dosyaDizisi);
return dosyaDizisi;
}
public static void anaPaneliGuncelle(BufferedImage secilenResim) {
// "Open..." seçildiğinde yapılacak işlemler
anaPanel.removeAll(); // Eski resimPanel'i temizle
merkezPanel.removeAll();
resim = secilenResim;
// Yeni resim boyutları
resimGenislik = resim.getWidth();
resimYukseklik = resim.getHeight();
merkezPanel.setBackground(new Color(232, 74, 74));
merkezPanel.setLayout(null);
merkezPanel.setBounds(x, y, resimGenislik, resimYukseklik);
try {
merkezPanel.add(resimPaneli());
} catch (IOException e1) {
e1.printStackTrace();
}
anaPanel.add(merkezPanel);
anaPanel.setBackground(new Color(77, 77, 77));
// Yeni resim boyutlarına göre anaPanel ve merkezPanel boyutlarını ayarlayalim
anaPanel.setSize(resimGenislik, resimYukseklik);
// Pencere kenarlık ve başlık çubuğu için +39
frame.setSize(resimGenislik + 200, resimYukseklik + 239);
anaPanel.repaint();
frame.setLocationRelativeTo(null);
}
public static void main(String[] args) throws IOException {
new OpenFolderPictures();
}
}