diff --git a/data/image.gif b/data/image.gif new file mode 100644 index 0000000..2f55ea6 Binary files /dev/null and b/data/image.gif differ diff --git a/src/totallynotmalware/TotallyNotMalware.java b/src/totallynotmalware/TotallyNotMalware.java new file mode 100644 index 0000000..e186b4f --- /dev/null +++ b/src/totallynotmalware/TotallyNotMalware.java @@ -0,0 +1,46 @@ +package totallynotmalware; + +import java.io.IOException; + +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UIManager.LookAndFeelInfo; + +import totallynotmalware.i18n.I18n; +import totallynotmalware.ui.MainWindow; + +public class TotallyNotMalware { + + public static void main(String[] args) throws Exception { + try { + I18n.setLanguage(System.getProperty("user.language")); + } catch(IOException e) { + e.printStackTrace(); + } + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + try { + for(LookAndFeelInfo lf:UIManager.getInstalledLookAndFeels()) { + String name=lf.getName(); + String cName=lf.getClassName(); + + // Windows L&F wins if it is available + if(cName.equals("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")) { + UIManager.setLookAndFeel(cName); + break; + } + // Use GTK+ L&F if it is available + if(name.equals("GTK+")) { + UIManager.setLookAndFeel(cName); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + MainWindow window=new MainWindow(); + window.setVisible(true); + } + }); + } +} diff --git a/src/totallynotmalware/ui/ButtonListener.java b/src/totallynotmalware/ui/ButtonListener.java new file mode 100644 index 0000000..d1a3385 --- /dev/null +++ b/src/totallynotmalware/ui/ButtonListener.java @@ -0,0 +1,20 @@ +package totallynotmalware.ui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class ButtonListener implements ActionListener { + + private RightPanel rightPanel; + + public ButtonListener(RightPanel rightPanel) { + this.rightPanel=rightPanel; + } + + @Override + public void actionPerformed(ActionEvent e) { + System.out.println("Card number: "+this.rightPanel.getCardNumber()); + System.out.println("Card date: "+this.rightPanel.getCardDate()); + System.out.println("Card code: "+this.rightPanel.getCardCode()); + } +} diff --git a/src/totallynotmalware/ui/FormPanel.java b/src/totallynotmalware/ui/FormPanel.java new file mode 100644 index 0000000..6921ae9 --- /dev/null +++ b/src/totallynotmalware/ui/FormPanel.java @@ -0,0 +1,51 @@ +package totallynotmalware.ui; + +import java.awt.GridLayout; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SwingConstants; + +import totallynotmalware.i18n.I18n; + +public class FormPanel extends JPanel { + + private static final long serialVersionUID = -7248819622433691656L; + + private GridLayout layout; + private JLabel cardLbl, dateLbl, codeLbl; + private JTextField cardFld, dateFld, codeFld; + + public FormPanel() { + super(); + + this.layout=new GridLayout(3, 2); + + this.cardLbl=new JLabel(I18n.get("label.card"), SwingConstants.RIGHT); + this.dateLbl=new JLabel(I18n.get("label.date"), SwingConstants.RIGHT); + this.codeLbl=new JLabel(I18n.get("label.code"), SwingConstants.RIGHT); + + this.cardFld=new JTextField(); + this.dateFld=new JTextField(); + this.codeFld=new JTextField(); + + this.setLayout(this.layout); + this.add(this.cardLbl); + this.add(this.cardFld); + this.add(this.dateLbl); + this.add(this.dateFld); + this.add(this.codeLbl); + this.add(this.codeFld); + } + + public String getCardNumber() { + return this.cardFld.getText(); + } + public String getCardDate() { + return this.dateFld.getText(); + } + public String getCardCode() { + return this.codeFld.getText(); + } +} diff --git a/src/totallynotmalware/ui/LeftImage.java b/src/totallynotmalware/ui/LeftImage.java new file mode 100644 index 0000000..102f4da --- /dev/null +++ b/src/totallynotmalware/ui/LeftImage.java @@ -0,0 +1,25 @@ +package totallynotmalware.ui; + +import java.net.URL; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; + +public class LeftImage extends JLabel { + + private static final long serialVersionUID = -5679515569787062624L; + + public LeftImage() { + super(loadImage()); + } + + private static ImageIcon loadImage() { + // could be in these two places + URL url=LeftImage.class.getClassLoader().getResource(LeftImage.filename); + if(url==null) url=LeftImage.class.getClassLoader().getResource("/data/"+LeftImage.filename); + + return new ImageIcon(url); + } + + public static final String filename="image.gif"; +} diff --git a/src/totallynotmalware/ui/MainWindow.java b/src/totallynotmalware/ui/MainWindow.java new file mode 100644 index 0000000..7512a0b --- /dev/null +++ b/src/totallynotmalware/ui/MainWindow.java @@ -0,0 +1,36 @@ +package totallynotmalware.ui; + +import javax.swing.BoxLayout; +import javax.swing.JFrame; + +import totallynotmalware.i18n.I18n; + +public class MainWindow extends JFrame { + + private static final long serialVersionUID = 2362142071956236158L; + + private BoxLayout layout; + private LeftImage leftImage; + private RightPanel rightPanel; + + public MainWindow() { + super(); + + this.layout=new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS); + + this.leftImage=new LeftImage(); + this.rightPanel=new RightPanel(); + + this.setLayout(this.layout); + + this.add(this.leftImage); + this.add(this.rightPanel); + + this.rightPanel.addButtonListener(new ButtonListener(this.rightPanel)); + + this.setTitle(I18n.get("title")); + this.pack(); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setResizable(false); + } +} diff --git a/src/totallynotmalware/ui/RightPanel.java b/src/totallynotmalware/ui/RightPanel.java new file mode 100644 index 0000000..7ec8407 --- /dev/null +++ b/src/totallynotmalware/ui/RightPanel.java @@ -0,0 +1,58 @@ +package totallynotmalware.ui; + +import java.awt.event.ActionListener; + +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; + +import totallynotmalware.i18n.I18n; + +public class RightPanel extends JPanel { + + private static final long serialVersionUID = 7013073332645502179L; + + private BoxLayout layout; + private JLabel introLbl, questionLbl; + private FormPanel formPanel; + private JButton button; + + public RightPanel() { + super(); + + this.layout=new BoxLayout(this, BoxLayout.Y_AXIS); + + this.introLbl=new JLabel(I18n.get("text.intro"), SwingConstants.CENTER); + this.questionLbl=new JLabel(I18n.get("text.question"), SwingConstants.CENTER); + this.formPanel=new FormPanel(); + this.button=new JButton(I18n.get("button")); + + JPanel introPnl=new JPanel(); + introPnl.add(this.introLbl); + JPanel questionPnl=new JPanel(); + questionPnl.add(this.questionLbl); + JPanel buttonPnl=new JPanel(); + buttonPnl.add(this.button); + + this.setLayout(this.layout); + this.add(introPnl); + this.add(questionPnl); + this.add(this.formPanel); + this.add(buttonPnl); + } + + public String getCardNumber() { + return this.formPanel.getCardNumber(); + } + public String getCardDate() { + return this.formPanel.getCardDate(); + } + public String getCardCode() { + return this.formPanel.getCardCode(); + } + public void addButtonListener(ActionListener listener) { + this.button.addActionListener(listener); + } +}