package de.repower.lvs.proxyipparser;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.StringTokenizer;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
public class IpFormatter extends JPanel
{
private static final long serialVersionUID = -2747869952472731549L;
public IpFormatter()
{
setBorder(new LineBorder(UIManager.getColor("Table.selectionBackground")));
setBackground(Color.WHITE);
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
setSize(120, 20);
ipField1.setPreferredSize(new Dimension(25, 18));
ipField1.setBorder(null);
ipField1.setHorizontalAlignment(SwingConstants.CENTER);
add(ipField1);
separator1.setBorder(null);
separator1.setForeground(Color.LIGHT_GRAY);
separator1.setFont(new Font("Dialog", Font.BOLD, 12));
separator1.setFocusable(false);
add(separator1);
ipField2.setPreferredSize(new Dimension(25, 18));
ipField2.setBorder(null);
ipField2.setHorizontalAlignment(SwingConstants.CENTER);
add(ipField2);
separator2.setBorder(null);
separator2.setForeground(Color.LIGHT_GRAY);
separator2.setFont(new Font("Dialog", Font.BOLD, 12));
separator2.setFocusable(false);
add(separator2);
ipField3.setPreferredSize(new Dimension(25, 18));
ipField3.setBorder(null);
ipField3.setHorizontalAlignment(SwingConstants.CENTER);
add(ipField3);
separator3.setBorder(null);
separator3.setForeground(Color.LIGHT_GRAY);
separator3.setFont(new Font("Dialog", Font.BOLD, 12));
separator3.setFocusable(false);
add(separator3);
ipField4.setPreferredSize(new Dimension(25, 18));
ipField4.setBorder(null);
ipField4.setHorizontalAlignment(SwingConstants.CENTER);
add(ipField4);
SymFocus aSymFocus = new SymFocus();
ipField1.addFocusListener(aSymFocus);
ipField2.addFocusListener(aSymFocus);
ipField3.addFocusListener(aSymFocus);
ipField4.addFocusListener(aSymFocus);
SymKey aSymKey = new SymKey();
ipField1.addKeyListener(aSymKey);
ipField2.addKeyListener(aSymKey);
ipField3.addKeyListener(aSymKey);
ipField4.addKeyListener(aSymKey);
}
JTextField ipField1 = new JTextField();
JTextField ipField2 = new JTextField();
JTextField ipField3 = new JTextField();
JTextField ipField4 = new JTextField();
JTextField separator1 = new JTextField(".");
JTextField separator2 = new JTextField(".");
JTextField separator3 = new JTextField(".");
public boolean setIp(String newIp)
{
StringTokenizer st = new StringTokenizer(newIp, ".");
if (st.countTokens() != 4)
{
clear();
return false;
}
String[] comps = new String[4];
for (int i = 0; i < 4; i++)
{
try
{
comps[i] = st.nextToken();
int test = Integer.parseInt(comps[i]);
if (test < 0 || test > 255)
{
clear();
return false;
}
}
catch (Exception ex)
{
clear();
return false;
}
}
ipField1.setText(comps[0]);
ipField2.setText(comps[1]);
ipField3.setText(comps[2]);
ipField4.setText(comps[3]);
return true;
}
public String getIp()
{
if (ipField1.getText().length() != 0 && ipField2.getText().length() != 0 && ipField3.getText().length() != 0
&& ipField4.getText().length() != 0)
{
String nip = ipField1.getText() + "." + ipField2.getText() + "." + ipField3.getText() + "."
+ ipField4.getText();
return nip;
}
else
return null;
}
public void clear()
{
ipField1.setText("");
ipField2.setText("");
ipField3.setText("");
ipField4.setText("");
}
class SymFocus extends FocusAdapter
{
public void focusGained(FocusEvent event)
{
Object object = event.getSource();
if (object == ipField1)
ip1_focusGained(event);
else if (object == ipField2)
ip2_focusGained(event);
else if (object == ipField3)
ip3_focusGained(event);
else if (object == ipField4)
ip4_focusGained(event);
}
}
void ip1_focusGained(FocusEvent event)
{
ipField1.selectAll();
}
void ip2_focusGained(FocusEvent event)
{
ipField2.selectAll();
}
void ip3_focusGained(FocusEvent event)
{
ipField3.selectAll();
}
void ip4_focusGained(FocusEvent event)
{
ipField4.selectAll();
}
class SymKey extends KeyAdapter
{
public void keyTyped(KeyEvent event)
{
Object object = event.getSource();
if (object == ipField1)
ip1_keyTyped(event);
else if (object == ipField2)
ip2_keyTyped(event);
else if (object == ipField4)
ip4_keyTyped(event);
else if (object == ipField3)
ip3_keyTyped(event);
}
}
void ip1_keyTyped(KeyEvent event)
{
processKey(ipField1, event);
}
void ip2_keyTyped(KeyEvent event)
{
processKey(ipField2, event);
}
void ip3_keyTyped(KeyEvent event)
{
processKey(ipField3, event);
}
void ip4_keyTyped(KeyEvent event)
{
processKey(ipField4, event);
}
public void processKey(JTextField tf, KeyEvent event)
{
int asc = event.getKeyChar();
if (asc == 46)
{
if (tf.getText().length() > 0)
{
if (tf.equals(ipField1))
ipField2.requestFocus();
else if (tf.equals(ipField2))
ipField3.requestFocus();
else if (tf.equals(ipField3))
ipField4.requestFocus();
}
event.consume();
}
else if (asc > 47 && asc < 58)
{
if (tf.getText().length() == 2)
{
if (tf.equals(ipField1))
ipField2.requestFocus();
else if (tf.equals(ipField2))
ipField3.requestFocus();
else if (tf.equals(ipField3))
ipField4.requestFocus();
}
if (tf.equals(ipField4) && tf.getText().length() == 3)
event.consume();
}
else if (asc == 8)
{
if (tf.getText().length() == 0)
{
event.consume();
if (tf.equals(ipField4))
{
ipField3.requestFocus();
ipField3.setCaretPosition(ipField3.getText().length());
}
if (tf.equals(ipField3))
{
ipField2.requestFocus();
ipField2.setCaretPosition(ipField2.getText().length());
}
if (tf.equals(ipField2))
{
ipField1.requestFocus();
ipField1.setCaretPosition(ipField1.getText().length());
}
}
}
else
{
event.consume();
}
}
}