import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;

public class SecmeliNufusGrafik {
	
	public static JPanel anapanel;
	
	public static String[] sehirler = new String[9];
	public static int[] nufuslar = new int[9];
	
	public SecmeliNufusGrafik() {
	
		JFrame frame = new JFrame("Karşılaştırmalı Nüfus Grafikleri | Java Blackboard [115]");
		
		anapanel = new JPanel();
		anapanel.setLayout(null);
		anapanel.setBackground(new Color(140, 100, 140));
		anapanel.setBounds(15,15,770,470);
		
		anapanel.add(infoPaneli(0,4,2,5));
		anapanel.add(grafikPaneli(0,4,2,5));
		
		frame.add(anapanel);
		
		frame.setSize(800,530);
		frame.setLayout(null);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(true);
		frame.setVisible(true);
		
	}
	
	public static JPanel infoPaneli(int sehir1, int sehir2, int sehir3, int sehir4) {
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBorder(new TitledBorder("Info Paneli"));
		panel.setBackground(new Color(242, 220, 242));
		panel.setBounds(15,15,250,440);
				
		LineBorder labelCerceve = new LineBorder(Color.black);
		
		sehirler[0] = "Afyonkarahisar";
		sehirler[1] = "Isparta";
		sehirler[2] = "Antalya";
		sehirler[3] = "Adıyaman";
		sehirler[4] = "Elazığ";
		sehirler[5] = "Kahramanmaraş";
		sehirler[6] = "Hatay";
		sehirler[7] = "Muğla";
		sehirler[8] = "Diyarbakır";
		
		nufuslar[0] = 747554;
	    nufuslar[1] = 445325;
	    nufuslar[2] = 2688004;
	    nufuslar[3] = 635169;
	    nufuslar[4] = 591497;
	    nufuslar[5] = 1177436;
	    nufuslar[6] = 1686043;
	    nufuslar[7] = 1048185;
	    nufuslar[8] = 1804880;
		
		int x = 25;
		int y = 25;
		int w = 200;
		int h = 30;
		int f = 15;
		
		JComboBox cb1 = new JComboBox(sehirler);
		cb1.setSelectedIndex(sehir1);
		
		JLabel lb1 = new JLabel(""+nufuslar[cb1.getSelectedIndex()]);
		lb1.setBorder(new TitledBorder(BorderFactory.createTitledBorder(labelCerceve, (String) cb1.getSelectedItem())));
		
		JComboBox cb2 = new JComboBox(sehirler);
		cb2.setSelectedIndex(sehir2);
		
		JLabel lb2 = new JLabel(""+nufuslar[cb2.getSelectedIndex()]);
		lb2.setBorder(new TitledBorder(BorderFactory.createTitledBorder(labelCerceve, (String) cb2.getSelectedItem())));
		
		JComboBox cb3 = new JComboBox(sehirler);
		cb3.setSelectedIndex(sehir3);
		
		JLabel lb3 = new JLabel(""+nufuslar[cb3.getSelectedIndex()]);
		lb3.setBorder(new TitledBorder(BorderFactory.createTitledBorder(labelCerceve, (String) cb3.getSelectedItem())));
		
		JComboBox cb4 = new JComboBox(sehirler);
		cb4.setSelectedIndex(sehir4);
		
		JLabel lb4 = new JLabel(""+nufuslar[cb4.getSelectedIndex()]);
		lb4.setBorder(new TitledBorder(BorderFactory.createTitledBorder(labelCerceve, (String) cb4.getSelectedItem())));
		
		cb1.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				
				int secilen_1 = cb1.getSelectedIndex();
				int secilen_2 = cb2.getSelectedIndex();
				int secilen_3 = cb3.getSelectedIndex();
				int secilen_4 = cb4.getSelectedIndex();
				
				anapanel.removeAll();
				
				anapanel.add(infoPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				anapanel.add(grafikPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
			
				anapanel.revalidate();
				anapanel.repaint();
				
				
			}
			
		});
		
		cb2.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				
				int secilen_1 = cb1.getSelectedIndex();
				int secilen_2 = cb2.getSelectedIndex();
				int secilen_3 = cb3.getSelectedIndex();
				int secilen_4 = cb4.getSelectedIndex();
				
				anapanel.removeAll();
				
				anapanel.add(infoPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				anapanel.add(grafikPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				
				anapanel.revalidate();
				anapanel.repaint();
			}
			
		});
		
		cb3.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				
				int secilen_1 = cb1.getSelectedIndex();
				int secilen_2 = cb2.getSelectedIndex();
				int secilen_3 = cb3.getSelectedIndex();
				int secilen_4 = cb4.getSelectedIndex();
				
				anapanel.removeAll();
				
				anapanel.add(infoPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				anapanel.add(grafikPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				
				anapanel.revalidate();
				anapanel.repaint();
			}
			
		});
		
		cb4.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				
				int secilen_1 = cb1.getSelectedIndex();
				int secilen_2 = cb2.getSelectedIndex();
				int secilen_3 = cb3.getSelectedIndex();
				int secilen_4 = cb4.getSelectedIndex();
				
				anapanel.removeAll();
				
				anapanel.add(infoPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				anapanel.add(grafikPaneli(secilen_1,secilen_2,secilen_3,secilen_4));
				
				anapanel.revalidate();
				anapanel.repaint();
			}
			
		});
		
		cb1.setBounds(x, y, w, h); y = y + h + f;
		lb1.setBounds(x, y, w, h+15); y = y + h + f + 15;
		
		cb2.setBounds(x, y, w, h); y = y + h + f;
		lb2.setBounds(x, y, w, h+15); y = y + h + f + 15;
		
		cb3.setBounds(x, y, w, h); y = y + h + f;
		lb3.setBounds(x, y, w, h+15); y = y + h + f + 15;
		
		cb4.setBounds(x, y, w, h); y = y + h + f;
		lb4.setBounds(x, y, w, h+15);
		
		panel.add(cb1);
		panel.add(lb1);
		panel.add(cb2);
		panel.add(lb2);
		panel.add(cb3);
		panel.add(lb3);
		panel.add(cb4);
		panel.add(lb4);
		
		return panel;
	}
	
	public static JPanel grafikPaneli(int sehir1, int sehir2, int sehir3, int sehir4) {
		
		JPanel panel = new JPanel() {
			protected void paintComponent(Graphics grafik) {
				
    			super.paintComponent(grafik);
	            Graphics2D grafik2D = (Graphics2D) grafik;
	           
	            int[] secilenler = new int[4];
	            secilenler[0] = nufuslar[sehir1];
	            secilenler[1] = nufuslar[sehir2];
	            secilenler[2] = nufuslar[sehir3];
	            secilenler[3] = nufuslar[sehir4];
	            
	            String[] secilenler_sehir = new String[4];
	            secilenler_sehir[0] = sehirler[sehir1];
	            secilenler_sehir[1] = sehirler[sehir2];
	            secilenler_sehir[2] = sehirler[sehir3];
	            secilenler_sehir[3] = sehirler[sehir4];
	            
	            int genislik = getWidth();  // Panelin genisligi
	            int yukseklik = getHeight();  // panelin yuksekligi
	            int barGenislik = genislik/((secilenler.length*2)+1);
	            
	            int maxNufus = Integer.MIN_VALUE;
	            
	        	Random r = new Random();
	        	
	        	Color[] barRenk = new Color[secilenler.length];
	        	
	        	for(int i = 0; i<secilenler.length; i++) {
	        		
	        		barRenk[i] = new Color(r.nextInt(130)+125, r.nextInt(130)+125, r.nextInt(130)+125);
	        	
	        	}
	            
	            for(int i = 0; i<secilenler.length; i++) {
	            	
	            	if(secilenler[i]>maxNufus) {
	            		 
	            		 maxNufus = secilenler[i];
	            		 
	            	 }
	            	 
	             }
	             
	            for(int i = 0; i<secilenler.length; i++) {
	            
	            	int barYukseklik = (int) (((double) secilenler[i]/(double) maxNufus)*yukseklik*0.8);
	            
	            	int x = i*(barGenislik*2)+barGenislik;
    				int y = yukseklik-barYukseklik-50;  // 700 - 500 - 50 = 150
    				
    				grafik2D.setColor(barRenk[i]);
    				grafik2D.fillRect(x, y, barGenislik, barYukseklik);
    				
    				Font font = new Font("Ubuntu", Font.BOLD, 17);
    				grafik2D.setFont(font);
    				
    				grafik2D.drawString(secilenler_sehir[i], x, yukseklik-25);
    				
    				grafik2D.drawString(secilenler[i]+"", x, y-5);
	            }
	            
    		}
    		
		};
	
		panel.setLayout(null);
		panel.setBorder(new TitledBorder("Grafik Paneli"));
		panel.setBackground(new Color(17, 32, 38));
		panel.setBounds(280,15,475,440);
		
		
		return panel;
	}
	
	public static void main(String[] args) {
		
		SwingUtilities.invokeLater(() -> {
		    
        	new SecmeliNufusGrafik();
        	
        });
		
	}

}
