📄 FrameOrtasiResim.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.MouseEvent; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; 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.event.MouseInputAdapter; import javax.swing.filechooser.FileNameExtensionFilter; public class FrameOrtasiResim { 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 koordinatlari public static int y; public static BufferedImage resim; public FrameOrtasiResim() throws IOException { resim = ImageIO.read(new File("src/images/otobusIci.jpg")); // açilis resmi. JFrame frame = new JFrame("Frame Merkezinde Resim Göster | Java Blackboard [149]"); frame.setLayout(null); JMenuBar menuBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem openItem = new JMenuItem("Open..."); JMenuItem saveItem = new JMenuItem("Save"); JMenuItem exitItem = new JMenuItem("Exit"); fileMenu.add(openItem); 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) { // "Open..." seçildiğinde yapılacak işlemler anaPanel.removeAll(); // Eski resimPanel'i temizle merkezPanel.removeAll(); resim = resimSec(); // 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); // 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(); } }); 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 void main(String[] args) throws IOException { new FrameOrtasiResim(); } }