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