package org.infosec.ismp.applet.manager.component;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.beans.*;
import java.io.*;
/**
* <p>Description:JIpAddressField IP地址格式的输入框<br>
*/
public class JIpAddressField extends JTextField implements Serializable {
public JNumberField ip1 = new JNumberField(0, 3, 0, 255, true);
public JNumberField ip2 = new JNumberField(0, 3, 0, 255, true);
public JNumberField ip3 = new JNumberField(0, 3, 0, 255, true);
public JNumberField ip4 = new JNumberField(0, 3, 0, 255, true);
class LeftRightKeyListener
extends KeyAdapter {
public static final String LEFT_TRAN = "LEFT_TRAN";
public static final String RIGHT_TRAN = "RIGHT_TRAN";
public void keyPressed(KeyEvent e) {
JTextComponent txt = (JTextComponent) e.getComponent();
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (txt.getCaretPosition() == 0) {
txt.firePropertyChange(LEFT_TRAN, 0, 1);
}
}
else if (e.getKeyCode() == KeyEvent.VK_RIGHT
|| e.getKeyChar() == '.') {
if (txt.getCaretPosition() == txt.getText().length()) {
txt.firePropertyChange(RIGHT_TRAN, 0, 1);
}
}
}
};
class LRTransListener
implements PropertyChangeListener {
private Component leftComponent, rightComponent;
public LRTransListener(Component leftComponent,
Component rightComponent) {
this.leftComponent = leftComponent;
this.rightComponent = rightComponent;
}
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName() == LeftRightKeyListener.LEFT_TRAN) {
if (leftComponent != null) {
leftComponent.requestFocus();
}
}
else if (evt.getPropertyName() == LeftRightKeyListener.RIGHT_TRAN) {
if (rightComponent != null) {
rightComponent.requestFocus();
}
}
}
}
public JIpAddressField() {
this("0.0.0.0");
}
public JIpAddressField(String strIpAddress) {
setPreferredSize(new Dimension(250, 25));
this.setLayout(new GridLayout(1, 9, 0, 0));
ip1.setBorder(null);
ip2.setBorder(null);
ip3.setBorder(null);
ip4.setBorder(null);
this.add(createDot(""));
this.add(ip1);
this.add(createDot("."));
this.add(ip2);
this.add(createDot("."));
this.add(ip3);
this.add(createDot("."));
this.add(ip4);
this.add(createDot(""));
this.setFocusable(false);
setIpAddress(strIpAddress);
LeftRightKeyListener lrKeyl = new LeftRightKeyListener();
ip1.addKeyListener(lrKeyl);
ip2.addKeyListener(lrKeyl);
ip3.addKeyListener(lrKeyl);
ip4.addKeyListener(lrKeyl);
ip1.addPropertyChangeListener(new LRTransListener(null, ip2));
ip2.addPropertyChangeListener(new LRTransListener(ip1, ip3));
ip3.addPropertyChangeListener(new LRTransListener(ip2, ip4));
ip4.addPropertyChangeListener(new LRTransListener(ip3, null));
}
private JLabel createDot(String dot) {
JLabel lb = new JLabel(dot);
lb.setOpaque(false);
return lb;
}
/**
* 设置IP地址
* @param strIpAddress String
*/
public void setIpAddress(String strIpAddress) {
if (strIpAddress != null && strIpAddress.equals("")) {
ip1.setText("");
ip2.setText("");
ip3.setText("");
ip4.setText("");
}
else {
if (strIpAddress == null || (strIpAddress.indexOf(".") == -1)
|| (strIpAddress.split("\\.").length != 4)) {
throw new UnsupportedOperationException("Invalid IP Address:" +
strIpAddress);
}
String strIp[] = strIpAddress.split("\\.");
ip1.setText(strIp[0]);
ip2.setText(strIp[1]);
ip3.setText(strIp[2]);
ip4.setText(strIp[3]);
}
}
/**
* 取得IP地址
* @return String
*/
public String getIpAddress() {
String strIp1 = ip1.getText().trim();
String strIp2 = ip2.getText().trim();
String strIp3 = ip3.getText().trim();
String strIp4 = ip4.getText().trim();
return (strIp1.equals("") ? "0" : strIp1) + "." +
(strIp2.equals("") ? "0" : strIp2) + "." +
(strIp3.equals("") ? "0" : strIp3) + "." +
(strIp4.equals("") ? "0" : strIp4);
}
public String getText() {
return getIpAddress();
}
public static void main(String[] args) {
// try {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// }
// catch (Exception e) {
// }
JFrame frame = new JFrame();
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("JIPAddressField Demo");
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JIpAddressField());
frame.getContentPane().add(new JIpAddressField("255.255.255.255"));
JIpAddressField ip = new JIpAddressField();
ip.setIpAddress("192.168.0.122");
frame.getContentPane().add(ip);
System.err.println(new JIpAddressField().getIpAddress());
frame.setSize(400, 320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation( (d.width - frame.getSize().width) / 2,
(d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
}