📄 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();
}
}