diff --git a/7. labor/caesarCode/src/caesarcode/CaesarCode.java b/7. labor/caesarCode/src/caesarcode/CaesarCode.java index ee5a02205db0c81db794a7e9e6d476e5d22ffdbd..7c168055a40149fa8ac592b68d1ab0ae38d0803b 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 0e7cb27212e1e475305d76e569146ca3796fc3fc..5e8ae79f21c592c1353922c5ac301eb89ca33581 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