import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class UzunlukOlcumu {

	private Point A, B;
	
	private int Ax = 100;
	private int Ay = 100;
	
	private int Bx = 300;
	private int By = 100;
	
	private int yeniAx = Ax;
	private int yeniAy = Ay;
	
	private int yeniBx = Bx;
	private int yeniBy = By;
	
	private JFrame frame;
	private JPanel anapanel, panel, uzaklikPanel;
	private JLabel mesafeEtiketi;

	public UzunlukOlcumu() {
		
		frame = new JFrame("Uzunluk Ölçümü | Java Blackboard [116]");
		frame.setLayout(null);
		
		anapanel = new JPanel();
		anapanel.setBackground(new Color(28, 83, 176)); // Koyu mavi renk.
		anapanel.setLayout(null);
		anapanel.setBounds(0,0,800,620);
		
		A = new Point(Ax, Ay);
		B = new Point(Bx, By);

		panel = new JPanel() {
			public void paintComponent(Graphics grafik) {
			
				super.paintComponent(grafik);
				Graphics2D grafik2d = (Graphics2D) grafik;
				grafik2d.setColor(Color.RED);
				grafik2d.drawLine((int) A.getX(), (int) A.getY(), (int) B.getX(), (int) B.getY());
			
			}
		};
		
		panel.setBackground(Color.WHITE);
		panel.setBounds(30, 120, 740, 300);
		
		anapanel.add(uzaklikInfo(A, B));
		anapanel.add(panel);
		anapanel.add(ABInfo());
		
		frame.add(anapanel);
		
		frame.setSize(800, 620);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public JPanel uzaklikInfo(Point C, Point D) {
		
		A = C;
		B = D;
		
		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(new Color(200, 233, 255));
		panel.setBounds(30, 30, 740, 60);
		
		Font mesafeFont = new Font("Ubuntu", Font.PLAIN, 27);

		// iki nokta arasındaki mesafeyi hesapla
		double mesafe = C.distance(D);

		// mesafeyi yazdırmak için bir etiket oluştur
		mesafeEtiketi = new JLabel(" |AB| = " + mesafe);
		mesafeEtiketi.setFont(mesafeFont);
		mesafeEtiketi.setHorizontalAlignment(JLabel.CENTER);
		mesafeEtiketi.setBounds(10, 10, 720, 40);

		// etiketi panele ekle
		panel.add(mesafeEtiketi);

		return panel;
	}
	
	public JPanel ABInfo() {
		
		JPanel infoPanel = new JPanel();
		infoPanel.setLayout(null);
		infoPanel.setBackground(new Color(200, 233, 255));
		infoPanel.setBounds(30, 450, 740, 120);
		
		Font mesafeFont = new Font("Ubuntu", Font.PLAIN, 27);

		JLabel aNoktasiLabel = new JLabel("A (x,y) :");
		aNoktasiLabel.setFont(mesafeFont);
		aNoktasiLabel.setHorizontalAlignment(JLabel.RIGHT);
		aNoktasiLabel.setBounds(10, 10, 150, 45);
		
		JTextField aNoktasiFieldX = new JTextField("100");
		aNoktasiFieldX.setFont(mesafeFont);
		aNoktasiFieldX.setHorizontalAlignment(JLabel.CENTER);
		aNoktasiFieldX.setBounds(180, 10, 70, 45);
		
		JTextField aNoktasiFieldY = new JTextField("100");
		aNoktasiFieldY.setFont(mesafeFont);
		aNoktasiFieldY.setHorizontalAlignment(JLabel.CENTER);
		aNoktasiFieldY.setBounds(260, 10, 70, 45);
		
		JLabel bNoktasiLabel = new JLabel("B (x,y) :");
		bNoktasiLabel.setFont(mesafeFont);
		bNoktasiLabel.setHorizontalAlignment(JLabel.RIGHT);
		bNoktasiLabel.setBounds(10, 70, 150, 45);
		
		JTextField bNoktasiFieldX = new JTextField("300");
		bNoktasiFieldX.setFont(mesafeFont);
		bNoktasiFieldX.setHorizontalAlignment(JLabel.CENTER);
		bNoktasiFieldX.setBounds(180, 70, 70, 45);
		
		JTextField bNoktasiFieldY = new JTextField("100");
		bNoktasiFieldY.setFont(mesafeFont);
		bNoktasiFieldY.setHorizontalAlignment(JLabel.CENTER);
		bNoktasiFieldY.setBounds(260, 70, 70, 45);
		
		JButton hesapla = new JButton("Hesapla");
		hesapla.setFont(mesafeFont);
		hesapla.setHorizontalAlignment(JLabel.CENTER);
		hesapla.setBounds(400, 70, 150, 45);
	
		// Buton'a tiklandiginda yapilacak görevler
		hesapla.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				
				yeniAx = Integer.parseInt(aNoktasiFieldX.getText());
				yeniAy = Integer.parseInt(aNoktasiFieldY.getText());
				                                                       
				yeniBx = Integer.parseInt(bNoktasiFieldX.getText());
				yeniBy = Integer.parseInt(bNoktasiFieldY.getText());
				
				A = new Point(yeniAx, yeniAy);
				B = new Point(yeniBx, yeniBy);
				
				anapanel.removeAll();
				
				panel.repaint();
				
				anapanel.add(uzaklikInfo(A,B));
				anapanel.add(panel);
				anapanel.add(ABInfo());
				
				infoPanel.repaint();
				
				frame.repaint();
				
			}
			
		});
		
		
		aNoktasiFieldX.setText(""+yeniAx);
		aNoktasiFieldY.setText(""+yeniAy);
		
		bNoktasiFieldX.setText(""+yeniBx);
		bNoktasiFieldY.setText(""+yeniBy);
		
		// etiketi panele ekle
		infoPanel.add(aNoktasiLabel);
		infoPanel.add(aNoktasiFieldX);
		infoPanel.add(aNoktasiFieldY);
		infoPanel.add(bNoktasiLabel);
		infoPanel.add(bNoktasiFieldX);
		infoPanel.add(bNoktasiFieldY);
		infoPanel.add(hesapla);

		
		return infoPanel;
	}

	public static void main(String[] args) {

		new UzunlukOlcumu();
		
		
	}
}