📄 Main.java .java dosyası
⬇️ İndir
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
public class Main {
public static JPanel panelResim; // ekrandaki ön izleme için
public static JPanel orijinalPanelResim; // 1080x1080 orijinal instagram post ölçüsü için
public static JLabel labelOrijinal;
public static JTextPane textPane;
public static JTextPane textPaneOrijinal;
public static JTextArea textA;
public static StyledDocument doc;
public static StyledDocument docOrijinal;
public static SimpleAttributeSet attrs;
public static Color yaziRengi;
public static Color yaziBgRengi;
public Main() throws IOException {
JFrame frame = new JFrame("1080x1080 Instagram Post Hazırlama | Java Blackboard [124]");
frame.add(resimPaneli());
frame.add(infoPaneli());
// frame.add(orijinalPanelResim);
frame.setSize(1100, 680); // 2200,1150
frame.setLayout(null);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
}
public static JPanel infoPaneli() {
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(new Color(223, 242, 237));
panel.setBounds(20, 20, 400, 600);
int x = 25;
int y = 25;
int w = 350;
int h = 30;
int f = 50;
JLabel labelBaslik = new JLabel("1080x1080 px Instagram Post");
labelBaslik.setFont(new Font("Ubuntu", Font.BOLD, 24));
labelBaslik.setBounds(x, y, w, h); y = y + f;
JButton resmiGuncelle = new JButton("Resmi Güncelle");
resmiGuncelle.setBounds(x, y, w, h); y = y + f;
JLabel label = new JLabel("Resme Eklenecek Yazı:");
label.setBounds(x, y, w, h); y = y + h;
String eklenecekYazi = "Mevlana'nın 7 Öğüdü\n"
+ "1) Cömertlik ve yardım etmede akarsu gibi ol.\n"
+ "2) Ṣevkat ve merhamette güneṣ gibi ol.\n"
+ "3) Başkalarının kusurunu örtmede gece gibi ol.\n"
+ "4) Hiddet ve asabiyette ölü gibi ol.\n"
+ "5) Tevazu ve alçakgönüllülükte toprak gibi ol.\n"
+ "6) Hoṣgörülülükte deniz gibi ol.\n"
+ "7) Ya olduğun gibi görün ya da göründüğün gibi ol.\n";
textA = new JTextArea(eklenecekYazi);
textA.setLineWrap(true);
textA.setWrapStyleWord(true); // JTextArea'da kelimeyi bölmeden bir alt satıra geçer
textA.setBounds(x, y, 350, 290); y = y + 340;
JButton kaydet = new JButton("Save as JPEG");
kaydet.setBounds(x, y, w, h); y = y + f;
textA.getDocument().addDocumentListener(new DocumentListener() {
@Override
// kullanıcı metin alanına yeni karakterler veya metin eklediğinde
// bu metot otomatik olarak tetiklenir.
public void insertUpdate(DocumentEvent e) {
updateTextPane();
}
@Override
// Kullanıcı metin alanındaki metni sildiğinde bu metot otomatik olarak tetiklenir.
public void removeUpdate(DocumentEvent e) {
updateTextPane();
}
@Override
// Kullanıcı metin alanındaki metin alanındaki metinin biçimini değiştirdiğinizde
// (örneğin, yazı tipi veya renk) bu metot tetiklenebilir.
public void changedUpdate(DocumentEvent e) {
}
private void updateTextPane() {
/**
* Bu metod insertUpdate ve removeUpdate metotları tarafından çağrılır ve
* metin alanındaki değişikliklere yanıt olarak gerçekleştirilmesi gereken
* özel işlemleri içerir.
*/
// JTextArea'daki metni JTextPane'e kopyala
SwingUtilities.invokeLater(() -> {
try {
String text = textA.getText();
doc = textPane.getStyledDocument();
docOrijinal = textPaneOrijinal.getStyledDocument();
doc.remove(0, doc.getLength());
doc.insertString(0, text, null);
docOrijinal.remove(0, docOrijinal.getLength());
docOrijinal.insertString(0, text, null); // null biçimlendirme için.
attrs = new SimpleAttributeSet();
StyleConstants.setBackground(attrs, yaziBgRengi);
doc.setCharacterAttributes(0, doc.getLength(), attrs, false);
docOrijinal.setCharacterAttributes(0, docOrijinal.getLength(), attrs, false);
} catch (BadLocationException ex) {
ex.printStackTrace();
}
});
}
});
resmiGuncelle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
panelResim.removeAll();
try {
panelResim.add(textPane);
panelResim.add(resimYenile(1080, 1080));
} catch (IOException e) {
e.printStackTrace();
}
panelResim.repaint();
// orijinalPanelResim'i güncelle
orijinalPanelResim.removeAll();
try {
orijinalPanelResim.add(textPaneOrijinal);
orijinalPanelResim.add(labelOrijinal);
} catch (Exception e) {
e.printStackTrace();
}
orijinalPanelResim.repaint();
}
});
kaydet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
BufferedImage bufferedImage = new BufferedImage(panelResim.getWidth(), panelResim.getHeight(), BufferedImage.TYPE_INT_RGB);
BufferedImage bufferedOrijinalImage = new BufferedImage(orijinalPanelResim.getWidth(), orijinalPanelResim.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.getGraphics();
Graphics gOrj = bufferedOrijinalImage.getGraphics();
panelResim.paint(g);
orijinalPanelResim.paint(gOrj);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-d HH-mm-ss");
Date date = new Date();
ImageIO.write(bufferedImage, "jpeg", new File(getDesktopPath()+"/resim-"+dateFormat.format(date)+".jpg"));
ImageIO.write(bufferedOrijinalImage, "jpeg", new File(getDesktopPath()+"/orjinalResim-"+dateFormat.format(date)+".jpg"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
panel.add(labelBaslik);
panel.add(resmiGuncelle);
panel.add(label);
panel.add(textA);
panel.add(kaydet);
return panel;
}
public static JPanel resimPaneli() throws IOException {
Font fontOrijinal = new Font("Ubuntu", Font.BOLD, 35); // 1080 lik resim için
Font font = new Font("Ubuntu", Font.BOLD, 18); // 500'lük resim için
yaziRengi = new Color(197, 200, 217);
yaziBgRengi = new Color(57, 72, 115);
//Yazıyı ekliyoruz
textPane = new JTextPane();
textPane.setForeground(yaziRengi);
textPane.setFont(font);
textPane.setOpaque(false);
textPane.setEditable(false);
textPane.setBounds(50,50,500,500);
doc = textPane.getStyledDocument();
textPaneOrijinal = new JTextPane();
textPaneOrijinal.setForeground(yaziRengi);
textPaneOrijinal.setFont(fontOrijinal);
textPaneOrijinal.setOpaque(false);
textPaneOrijinal.setEditable(false);
textPaneOrijinal.setBounds(50,50,980,980);
docOrijinal = textPaneOrijinal.getStyledDocument();
panelResim = new JPanel();
panelResim.setLayout(null);
panelResim.setBackground(new Color(242, 224, 213));
panelResim.setBounds(480,20,600,600);
panelResim.add(textPane);
panelResim.add(resimYenile(1080,1080));
orijinalPanelResim = new JPanel();
orijinalPanelResim.setLayout(null);
orijinalPanelResim.setBackground(new Color(242, 224, 213));
orijinalPanelResim.setBounds(0,0,1080,1080); // 0,0, w, h,
orijinalPanelResim.add(textPaneOrijinal);
orijinalPanelResim.add(labelOrijinal);
return panelResim;
}
public static JLabel resimYenile(int w, int h) throws IOException {
URL imageUrl = new URL("https://picsum.photos/"+w+"/"+h);
Image imageOrijinal = ImageIO.read(imageUrl);
labelOrijinal = new JLabel(new ImageIcon(imageOrijinal));
labelOrijinal.setBounds(0, 0, 1080, 1080);
Image image = imageOrijinal.getScaledInstance(600, 600, Image.SCALE_DEFAULT);
JLabel label = new JLabel(new ImageIcon(image));
label.setBounds(0, 0, 600, 600);
return label;
}
public static String getDesktopPath() {
// Bu method, sistemde bulunan kullanıcının masaüstü klasörünün yolunu döndürür.
// Öncelikle, java.nio.file.Paths sınıfının get() yöntemini kullanır.
// Bu yöntem, sistemde bulunan kullanıcının masaüstü klasörünün yolunu döndürür.
Path desktopPath = Paths.get(System.getProperty("user.home"), "Desktop");
// Daha sonra, bulunan yolu String olarak dönüştürmek için toString() yöntemini kullanırız.
String desktopPathString = desktopPath.toString();
// Son olarak, bulunan masaüstü yolunu döndürürüz.
return desktopPathString;
}
}