package com.kolakcc.loljclient.view; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.FlowLayout; import java.awt.FocusTraversalPolicy; import java.awt.GridLayout; import java.util.ArrayList; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import com.kolakcc.loljclient.model.swing.LoLNewsTableModel; import com.kolakcc.loljclient.util.LocaleMessages; import com.kolakcc.loljclient.view.ui.LocalizedJButton; import com.kolakcc.loljclient.view.ui.LocalizedJCheckBox; import com.kolakcc.loljclient.view.ui.LocalizedJLabel; public class LoginView extends KolaView { public JTextField usernameField; public JPasswordField passwordField; public LocalizedJButton loginButton; public JComboBox<String> regionField; public JTable newsList; public LocalizedJCheckBox rememberUsername, rememberPassword; LoLNewsTableModel newsModel; static LocaleMessages loginViewMessages = new LocaleMessages("loginViewBundle"); public LoginView() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("lol-jclient"); this.setSize(400,600); this.newsList = new JTable(); JScrollPane newsScrollPanel = new JScrollPane(this.newsList); this.add(newsScrollPanel, BorderLayout.CENTER); JPanel bottomPanel = new JPanel(new BorderLayout()); JPanel formPanel = new JPanel(new GridLayout(6, 1)); JPanel regionPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); regionPanel.add(new LocalizedJLabel(loginViewMessages, "region")); formPanel.add(regionPanel); this.regionField = new JComboBox<String>(); formPanel.add(regionField); JPanel usernamePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); usernamePanel.add(new LocalizedJLabel(loginViewMessages, "username")); rememberUsername = new LocalizedJCheckBox(loginViewMessages, "remember"); usernamePanel.add(rememberUsername); formPanel.add(usernamePanel); this.usernameField = new JTextField(20); formPanel.add(usernameField); JPanel passwordPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); passwordPanel.add(new LocalizedJLabel(loginViewMessages, "password")); rememberPassword = new LocalizedJCheckBox(loginViewMessages, "remember"); passwordPanel.add(rememberPassword); formPanel.add(passwordPanel); this.passwordField = new JPasswordField(20); formPanel.add(passwordField); bottomPanel.add(formPanel, BorderLayout.NORTH); this.loginButton = new LocalizedJButton(loginViewMessages, "login"); bottomPanel.add(this.loginButton, BorderLayout.SOUTH); this.add(bottomPanel,BorderLayout.SOUTH); usernameField.requestFocusInWindow(); ArrayList<Component> focusList = new ArrayList<Component>(); focusList.add(usernameField); focusList.add(passwordField); focusList.add(loginButton); this.setFocusTraversalPolicy(new ListFocusTraversalPolicy(focusList)); this.setVisible(true); } } class ListFocusTraversalPolicy extends FocusTraversalPolicy { ArrayList<Component> order; public ListFocusTraversalPolicy(ArrayList<Component> order) { this.order = new ArrayList<Component>(order.size()); this.order.addAll(order); } public Component getComponentAfter(Container focusCycleRoot, Component aComponent) { int idx = (order.indexOf(aComponent) + 1) % order.size(); return order.get(idx); } public Component getComponentBefore(Container focusCycleRoot, Component aComponent) { int idx = order.indexOf(aComponent) - 1; if (idx < 0) { idx = order.size() - 1; } return order.get(idx); } public Component getDefaultComponent(Container focusCycleRoot) { return order.get(0); } public Component getLastComponent(Container focusCycleRoot) { return order.get(order.size()); } public Component getFirstComponent(Container focusCycleRoot) { return order.get(0); } }