import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.StringTokenizer;
public class ipPanel extends JPanel{
public ipPanel(){
this("");
}
public ipPanel(String ip){
//INIT_CONTROLS
setLayout(null);
setSize(137,22);
add(ip1);
ip1.setBounds(1,1,30,20);
ip1.setBorder(null);
ip1.setHorizontalAlignment(JTextField.CENTER);
add(lbl_sep1);
lbl_sep1.setBounds(31,1,5,20);
lbl_sep1.setHorizontalAlignment(JLabel.CENTER);
add(ip2);
ip2.setBounds(36,1,30,20);
ip2.setBorder(null);
ip2.setHorizontalAlignment(JTextField.CENTER);
add(lbl_sep2);
lbl_sep2.setBounds(66,1,5,20);
lbl_sep2.setHorizontalAlignment(JLabel.CENTER);
add(ip3);
ip3.setBounds(71,1,30,20);
ip3.setBorder(null);
ip3.setHorizontalAlignment(JTextField.CENTER);
add(lbl_sep3);
lbl_sep3.setBounds(101,1,5,20);
lbl_sep3.setHorizontalAlignment(JLabel.CENTER);
add(ip4);
ip4.setBounds(106,1,30,20);
ip4.setBorder(null);
ip4.setHorizontalAlignment(JTextField.CENTER);
SymKey aSymKey = new SymKey();
ip1.addKeyListener(aSymKey);
ip2.addKeyListener(aSymKey);
ip3.addKeyListener(aSymKey);
ip4.addKeyListener(aSymKey);
setBorder(BorderFactory.createLineBorder(Color.BLACK));
setBackground(Color.WHITE);
setIP(ip);
}
javax.swing.JTextField ip1 = new javax.swing.JTextField();
javax.swing.JTextField ip2 = new javax.swing.JTextField();
javax.swing.JTextField ip3 = new javax.swing.JTextField();
javax.swing.JTextField ip4 = new javax.swing.JTextField();
JLabel lbl_sep1 = new JLabel(".");
JLabel lbl_sep2 = new JLabel(".");
JLabel lbl_sep3 = new JLabel(".");
public boolean setIP(String newIP){
System.out.println("parsing ip "+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();
System.out.println("parsing ip token out of range: "
+ test);
return false;
}
}catch(Exception ex){clear(); System.out.println("parsing ip
invalid token: "+comps[i]);return false;}
}
ip1.setText(comps[0]);
ip2.setText(comps[1]);
ip3.setText(comps[2]);
ip4.setText(comps[3]);
return true;
}
public String getIP(){
if ( ip1.getText().length()!=0 && ip2.getText().length()!=0 &&
ip3.getText().length()!=0 && ip4.getText().length()!=0 ){
StringBuilder sb = new StringBuilder();
sb.append(ip1.getText()).append(".").append(ip2.getText()).append(".").append(ip3.getText()).append(".").append(ip4.getText());
return sb.toString();
}
else return null;
}
public void clear(){
ip1.setText("");
ip2.setText("");
ip3.setText("");
ip4.setText("");
}
class SymKey extends java.awt.event.KeyAdapter
{
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() ==
KeyEvent.VK_RIGHT){
keyTyped(e);
}
}
public void keyTyped(java.awt.event.KeyEvent event)
{
Object object = event.getSource();
if (object == ip1)
ip1_keyTyped(event);
else if (object == ip2)
ip2_keyTyped(event);
else if (object == ip4)
ip4_keyTyped(event);
else if (object == ip3)
ip3_keyTyped(event);
}
}
void ip1_keyTyped(java.awt.event.KeyEvent event)
{
processKey(ip1,event);
}
void ip2_keyTyped(java.awt.event.KeyEvent event)
{
processKey(ip2,event);
}
void ip3_keyTyped(java.awt.event.KeyEvent event)
{
processKey(ip3,event);
}
void ip4_keyTyped(java.awt.event.KeyEvent event)
{
processKey(ip4,event);
}
public void processKey(JTextField tf,java.awt.event.KeyEvent event){
int asc=event.getKeyChar();
//System.out.println("asc="+asc);
if ( asc==46 ){
if ( tf.getText().length()>0 ){
if ( tf.equals(ip1) )
ip2.requestFocus();
else if ( tf.equals(ip2) )
ip3.requestFocus();
else if ( tf.equals(ip3) )
ip4.requestFocus();
}
event.consume();
}else if ( asc>47 && asc<58 ){
if ( tf.getText().length()==2 ){
moveFocus(tf, true);
}
if (Integer.parseInt(tf.getText()+event.getKeyChar())>255)
{
tf.setText("255");
event.consume();
}
if ( tf.equals(ip4) && tf.getText().length()>=3 )
event.consume();
}
else if (asc==KeyEvent.VK_BACK_SPACE ) {
if ( tf.getText().length()==0 ){
event.consume();
moveFocus(tf, false);
}
}else if (event.getKeyCode() == KeyEvent.VK_LEFT){
if (tf.getCaretPosition() == 0){
moveFocus(tf, false);
}
}else if (event.getKeyCode() == KeyEvent.VK_RIGHT){
if (tf.getCaretPosition() == tf.getText().length()){
moveFocus(tf, true);
}
}
else{
event.consume();
}
}
private void moveFocus(JTextField tf, boolean to_right){
if (!to_right){
if ( tf.equals(ip4) ){
ip3.requestFocus();
ip3.setCaretPosition(ip3.getText().length());
}
if ( tf.equals(ip3) ){
ip2.requestFocus();
ip2.setCaretPosition(ip2.getText().length());
}
if ( tf.equals(ip2) ){
ip1.requestFocus();
ip1.setCaretPosition(ip1.getText().length());
}
}else{
if ( tf.equals(ip1) ){
ip2.requestFocus();
ip2.setCaretPosition(ip2.getText().length());
}
if ( tf.equals(ip2) ){
ip3.requestFocus();
ip3.setCaretPosition(ip3.getText().length());
}
if ( tf.equals(ip3) ){
ip4.requestFocus();
ip4.setCaretPosition(ip4.getText().length());
}
}
}
public static void main(String[] args) {
JFrame fr = new JFrame();
fr.setSize(500,500);
fr.setLayout(null);
fr.add( new ipPanel("2.34.45.6"));
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
Time
is money!


