📄 OpenSaveExit.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 OpenSaveExit { 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 OpenSaveExit() throws IOException { resim = ImageIO.read(new File("src/images/nehir.png")); // açılış resmi. frame = new JFrame("Frame Merkezinde Resim Göster | Java Blackboard [150]"); frame.setLayout(null); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem openItem = new JMenuItem("Open..."); JMenu openSrcImages = new JMenu("Open Images"); // File altında sağa açılır menü oluşturacak. JMenuItem saveItem = new JMenuItem("Save"); JMenuItem exitItem = new JMenuItem("Exit"); String[] imagesDosyalari = resimDosyaListesi(); JMenuItem[] itemDosyaListesi = new JMenuItem[imagesDosyalari.length]; for (int i = 0; i < imagesDosyalari.length; i++) { System.out.println(i + ". " + imagesDosyalari[i]); itemDosyaListesi[i] = new JMenuItem(imagesDosyalari[i]); openSrcImages.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(); } } }); } fileMenu.add(openItem); fileMenu.add(openSrcImages); fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane fileMenu.add(saveItem); fileMenu.addSeparator(); // Ayırıcı ekleyelim bi tane fileMenu.add(exitItem); menuBar.add(fileMenu); // 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 dizinYolu = "src/images/"; 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 OpenSaveExit(); } }