From b82bb0a5a65f4be42a244c9a5b58afdcbb874d99 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eckl=2C=20M=C3=A1t=C3=A9?= <ecklm@sch.bme.hu>
Date: Tue, 27 Oct 2015 09:47:43 +0100
Subject: [PATCH] =?UTF-8?q?7.=20labor=20=C3=B6sszes=20feladat=20k=C3=A9sz?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

A feladatok egy részét szerintem sokkal egyszerűbben is meg lehetett
volna csinálni, de legalább már tudjuk mi az, hogy focusListener.Én
ebben az esetben tuti nem így csináltam volna.
---
 .../caesarCode/src/caesarcode/CaesarCode.java | 16 +++++
 .../src/caesarcode/caesarFrame.java           | 62 +++++++++++++++++--
 2 files changed, 73 insertions(+), 5 deletions(-)

diff --git a/7. labor/caesarCode/src/caesarcode/CaesarCode.java b/7. labor/caesarCode/src/caesarcode/CaesarCode.java
index ee5a022..7c16805 100644
--- a/7. labor/caesarCode/src/caesarcode/CaesarCode.java	
+++ b/7. labor/caesarCode/src/caesarcode/CaesarCode.java	
@@ -17,4 +17,20 @@ public class CaesarCode {
 		}
 		return s;
 	}
+	public static String caesarDeCode(String input, char offset)
+	{
+		String s = "";
+		input=input.toUpperCase();
+		offset=Character.toUpperCase(offset);
+		int numericOffset=(int)offset - (int)'A';
+		int len = input.length();
+		for(int x = 0; x < len; x++){
+			char c = (char)(input.charAt(x) - numericOffset);
+			if (c < 'A')
+				s += (char)(input.charAt(x) + (26-numericOffset));
+			else
+				s += (char)(input.charAt(x) - numericOffset);
+		}
+		return s;
+	}
 }
diff --git a/7. labor/caesarCode/src/caesarcode/caesarFrame.java b/7. labor/caesarCode/src/caesarcode/caesarFrame.java
index 0e7cb27..5e8ae79 100644
--- a/7. labor/caesarCode/src/caesarcode/caesarFrame.java	
+++ b/7. labor/caesarCode/src/caesarcode/caesarFrame.java	
@@ -6,12 +6,16 @@ import java.awt.GridLayout;
 import java.awt.HeadlessException;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
 
 public class caesarFrame extends JFrame{
 
@@ -20,6 +24,8 @@ public class caesarFrame extends JFrame{
 	private final JTextField f1, f2;
 	private final JButton btn;
 	
+	private boolean decode=false;
+	
 	public caesarFrame() throws HeadlessException {
 		super("SwingLab");
 //		this.setTitle("SwingLab");
@@ -37,7 +43,11 @@ public class caesarFrame extends JFrame{
 		for(int i=(int)'A';i<=(int)'Z';i++)
 			chars[i-(int)'A']=(char)i;
 		jcb=new JComboBox(chars); p1.add(jcb);
-		f1=new JTextField(20); f1.setEnabled(true); p1.add(f1);
+		f1=new JTextField(20); 
+		f1.addFocusListener(new FocuseLoseListener(false));
+		f1.setEnabled(true); 
+		f1.getDocument().addDocumentListener(new InputKeyFieldListener()); 
+		p1.add(f1);
 		btn=new JButton(); btn.setText("Code!");
 		btn.addActionListener(new OkButtonActionListener());
 		p1.add(btn);
@@ -48,7 +58,8 @@ public class caesarFrame extends JFrame{
 		add(p2);
 		p2.add(new JLabel("Output:"),BorderLayout.WEST);
 		f2=new JTextField(20);
-		f2.setEnabled(false);
+		f2.setEditable(true);
+		f2.addFocusListener(new FocuseLoseListener(true));
 		p2.add(f2);
 		//-----------------------------------------------
 		
@@ -56,11 +67,52 @@ public class caesarFrame extends JFrame{
 		setVisible(true);
 	}
 	
-	private class OkButtonActionListener extends CaesarCode implements ActionListener
-	{
+	private class OkButtonActionListener implements ActionListener
+	{		
 		@Override
 		public void actionPerformed(ActionEvent ae) {
-			f2.setText(caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+			if(decode==true)
+				f1.setText(CaesarCode.caesarDeCode(f2.getText(), (char)jcb.getSelectedItem()));
+			else
+				f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+	}
+	
+	private class FocuseLoseListener implements FocusListener
+	{
+		private boolean dir;
+		public FocuseLoseListener(boolean b)
+		{
+			dir=b;
+		}
+		
+		@Override
+		public void focusGained(FocusEvent fe) {
+//			throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+		}
+
+		@Override
+		public void focusLost(FocusEvent fe) {
+			decode=dir;
+		}
+		
+	}
+	
+	private class InputKeyFieldListener implements DocumentListener
+	{
+		@Override
+		public void insertUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+
+		@Override
+		public void removeUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
+		}
+
+		@Override
+		public void changedUpdate(DocumentEvent de) {
+			f2.setText(CaesarCode.caesarCode(f1.getText(), (char)jcb.getSelectedItem()));
 		}
 	}
 }
\ No newline at end of file
-- 
GitLab