
import java.awt.Color;
import java.util.Scanner;

import javax.swing.*;

public class SayilardanCerceveDeseni {
	
	public static int[][] desen;
	
	public static int n = 5;
	public static int cerceve = (n+1)/2;
	public static int sabit = cerceve-2;
	
	// n=17    ->    cerceve = 9     ->    sabit = 7
	// n=15    ->    cerceve = 8     ->    sabit = 6
	// n=13    ->    cerceve = 7     ->    sabit = 5
	// n=11    ->    cerceve = 6     ->    sabit = 4
	// n=9     ->    cerceve = 5     ->    sabit = 3
	// n=7     ->    cerceve = 4     ->    sabit = 2
	// n=5     ->    cerceve = 3     ->    sabit = 1
	// n=3     ->    cerceve = 2     ->    sabit = 0

	public SayilardanCerceveDeseni() {
		
		System.out.print("2 - 18 arasinda bir tek sayi giriniz : " );
		
		Scanner klavye = new Scanner(System.in);
		n = klavye.nextInt();
		
		if ((n%2 == 0) || (n<3  || n>17)) {
			System.out.println("Uygun sart saglanmadi");
			System.err.println("Program sonlandirildi...");
			System.exit(0);
		}
		
		cerceve = (n+1)/2;
		sabit = cerceve-2;
		
		desen = new int[n][n];
		
		klavye.close();
		
		System.out.println();
		
		for (int i=cerceve ; i>=1 ; i--) {
			
			cerceveOlustur(i);
			
		}
		
		
		// By for döngüsü CONSOLE çiktisi veriyor.
		for(int i = 0; i<n; i++) {
			
			for(int j = 0; j<n; j++) {
				
				System.out.print(desen[i][j]);
				
			}
			
			System.out.println();
		}
		
		// JFrame içinde renkli panellerin gösterildigi metodu cagiriyoruz.
		frameGoster();
	}
	
	public static void cerceveOlustur(int kare) {
		
		for (int i=cerceve-kare ; i<=kare+sabit ; i++) {
			
			for (int j=cerceve-kare ; j<=kare+sabit ; j++) {
				
				desen[i][j] = kare;
				
			}
			
		}
		
	}
	
	public static JFrame frameGoster() {
		
		JFrame frame = new JFrame("067 Sayilardan Cerceve Deseni JFrame çözümü");
		frame.setLayout(null);
		
		Color background = new Color(0,0,0);
		
		Color[] renk = new Color[9];
		
		renk[0] = new Color(126, 203, 247); 	// mavi
		renk[1] = new Color(254, 217, 0);		// sari
		renk[2] = new Color(118, 222, 142);		// yesil
		renk[3] = new Color(242, 183, 5);		// tuuncu
		renk[4] = new Color(209, 132, 213);		// lila
		renk[5] = new Color(167, 189, 204);		// fume
		renk[6] = new Color(153, 23, 59);		// bordo
		renk[7] = new Color(11, 219, 247);		//CamGobegi
		renk[8] = new Color(183, 174, 242);		// mor
		
		JPanel[][] panel = new JPanel[n][n];
		
		JLabel labelSayi= new JLabel();
		
		int baslangicNoktasi = 20;

		int fark = 51;
		int olcu = fark-3;
		
		int x = baslangicNoktasi;
		int y = baslangicNoktasi;
		
		int genislik = olcu;
		int yukseklik = olcu;
		
		for(int i = 0; i<n; i++) {
			
			for(int j = 0; j<n; j++) {
				
				panel[i][j] = new JPanel(); // cok zor cozeceginiz bir null hatasi alirsiniz...
				panel[i][j].setLayout(null);
				
				switch (desen[i][j]) {
			//	case 0 : background = renk[0]; break;
				case 1 : background = renk[1]; break;
				case 2 : background = renk[2]; break;
				case 3 : background = renk[3]; break;
				case 4 : background = renk[4]; break;
				case 5 : background = renk[5]; break;
				case 6 : background = renk[6]; break;
				case 7 : background = renk[7]; break;
				case 8 : background = renk[8]; break;
				case 9 : background = renk[0]; break;
				}
				
				panel[i][j].setBackground(background);
				panel[i][j].setBounds((x + (j*fark)),y,genislik,yukseklik);
				
				labelSayi = new JLabel(""+desen[i][j]);
				labelSayi.setBounds(0, 0, genislik,yukseklik);
				labelSayi.setHorizontalAlignment(JLabel.CENTER);
				panel[i][j].add(labelSayi);
				
				frame.add(panel[i][j]);
				
			}
			
			x = baslangicNoktasi;
			y = y + fark;
		}
		
		
		frame.setSize(900, 930);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		frame.setVisible(true);
		
		return frame;
		
	}

}

