⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jipaddressfield.java~1~

📁 java编写的聊天室客户端程序
💻 JAVA~1~
字号:
/*
 * 文件: JIPAddressField.java
 * 日期         作者        改变情况
 * 2004-9-1     Dorian      创建
*/
package chatClient;
 
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Map;
 
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;
 
/**
 * <p>IP地址文本框</p>
 * <P>=========================================================
 * <p>可以像JTextField一样用setText(),getText()来存取值
 * <p>可以设置为IPV4,IPV6或者更大.
 * <P>=========================================================
 * <P>Copyright (c) 2004 Dorian. All rights reserved</p>
 * <P>@(#)JIPAddressField.java 创建日期 2004-9-1</p>
 * <P>更新日期 2004-9-1</p>
 * <p>@author <a href="mailto:Dorian@citiz.net">Dorian</a></p>
 * <p>@version 1.0.0</p>
 */
public class JIPAddressField extends JTextField {
    /**
     * 无参构造器,提供默认地址"127.0.0.1"
     * 默认为IPV4
     */
    public JIPAddressField() {
        this("127.0.0.1");
    }
    
    /**
     * 可设置地址的构造器,默认为IPV4
     * @param address 地址
     */
    public JIPAddressField(String address) {
        this(4,address);
    }
    
    /**
     * 可设置IPV和地址的构造器
     * @param IPV IPV
     * @param address 地址
     */
    public JIPAddressField(int IPV,String address) {
        this.IPV = IPV;                                 //设置IPV
        int fieldWidth = IPV * 30;                      //计算文本框的宽
        setPreferredSize(new Dimension(fieldWidth,25)); //设置文本框的默认大小
        setLayout(new BoxLayout(this,BoxLayout.X_AXIS));//设置Layout为BoxLayout
        setFocusable(false);                            //设置不获取焦点
        
        //左右键移动监听器
        LeftRightListener lrListener = new LeftRightListener();
        
        for(int i=1;i<=IPV;i++) {
            if(i != 1)  //第一个不添加"."
                add(createlabDot("."));
            
            //创建新的数字框
            JNumberField ip;
            if(i == IPV)
                ip = new JNumberField(0,3,0,255,false);
            else
                ip = new JNumberField(0,3,0,255,true);
                
            ip.addKeyListener(lrListener);
            ip.setBorder(null);     //设置为无边框
 
            //添加到map中并加载
            map.put(""+i,ip);
            add(ip);
        }
        
        add(createlabDot(" "));
        
        setIPAddress(address);      //设置IP地址
        setFieldTransListener();    //设置转移监听器
    }// End JIPAddressField Constructor
    
    //创建IP地址中的"."
    private JLabel createlabDot(String dot) {
        JLabel lab = new JLabel(dot);
        lab.setOpaque(false);           //设置为透明
        lab.setIgnoreRepaint(true);     //忽略重绘
        lab.setBorder(null);            //不绘制边框
        lab.setFocusable(false);        //不得到焦点
        return lab;
    }
    
    /**
     * 设置IP地址
     * @see javax.swing.text.JTextComponent#setText(java.lang.String)
     */
    public void setText(String address) {
        setIPAddress(address);
    }
    
    /**
     * 获取IP地址
     * @see javax.swing.text.JTextComponent#getText()
     */
    public String getText() {
        return getIPAddress();
    }
    
    //设置IP
    private void setIPAddress(String address) {
        if (address != null && address.equals("")) {
            String[] temp = new String[IPV];
            for(int i=1;i<=IPV;i++)
                temp[i-1] = "";
            setIPField(temp);           //设置为空
        }
        else {
            int dotIndex = address.indexOf(".");        //点的位置
            String strIP[] = address.split("\\.");      //IP分段
            int dotNumber = strIP.length;               //点的个数(分段的个数)
            if (address == null || dotIndex == -1 || dotNumber != IPV) {
                //不抛出异常,设置其为空
                setIPAddress("");
                return;
            }
            
            setIPField(strIP);
        }
    }
    
    //获取IP
    private String getIPAddress() {
        StringBuffer bufString = new StringBuffer();
        for(int i=1;i<=IPV;i++) {
            String temp = ((JNumberField)map.get(i+"")).getText().trim();
            if(i == IPV)
                bufString.append(temp);
            else 
                bufString.append(temp + ".");
        }
        return bufString.toString();
    }
    
    //设置Ip到数字框
    private void setIPField(String[] arg) {
        for(int i=0;i<IPV;i++)
            ((JNumberField)map.get(i+1+"")).setText(arg[i]);
    }
    
    //设置转移监听器
    //转移的方向为:左->前一个;右->后一个
    private void setFieldTransListener() {
        ((JNumberField)map.get("1")).addPropertyChangeListener(new LRTransListener(
                                        null,(JNumberField)map.get("2")));
        for(int i=2;i<IPV;i++) {
            JNumberField left = (JNumberField)map.get(i-1+"");
            JNumberField right= (JNumberField)map.get(i+1+"");
            ((JNumberField)map.get(""+i)).addPropertyChangeListener(new LRTransListener(left,right));
        }
        ((JNumberField)map.get(""+IPV)).addPropertyChangeListener(new LRTransListener(
                                        (JNumberField)map.get(IPV-1+""),null));
    }
    
    private int IPV = 4;                        //IPV
    private Map map = new HashMap();            //存储数字框
    
    /**
     * <p>左右键监听器</p>
     * <P>=========================================================
     * <p>左右键监听器
     * <P>=========================================================
     * <P>Copyright (c) 2004 Dorian. All rights reserved</p>
     * <P>@(#)JIPAddressField.java 创建日期 2004-9-2</p>
     * <P>更新日期 2004-9-2</p>
     * <p>@author <a href="mailto:Dorian@citiz.net">Dorian</a></p>
     * <p>@version 1.0.0</p>
     */
    class LeftRightListener extends KeyAdapter {
        public static final String LEFT_TRAN = "LEFT_TRAN";
        public static final String RIGHT_TRAN = "RIGHT_TRAN";
        public void keyPressed(KeyEvent keyEvent) {
            JTextComponent text = (JTextComponent)keyEvent.getComponent();
            if (keyEvent.getKeyCode() == KeyEvent.VK_LEFT) {
                if (text.getCaretPosition() == 0) {
                    //激活PropertyChange事件
                    text.firePropertyChange(LEFT_TRAN, 0, 1);
                }
            }
            else if (keyEvent.getKeyCode() == KeyEvent.VK_RIGHT) {
                if (text.getCaretPosition() == text.getText().length()) {
                    text.firePropertyChange(RIGHT_TRAN, 0, 1);
                }
            }
        }
    }// End LeftRightListener Class
    /**
     * <p>转移监听器</p>
     * <P>=========================================================
     * <p>转移监听器
     * <P>=========================================================
     * <P>Copyright (c) 2004 Dorian. All rights reserved</p>
     * <P>@(#)JIPAddressField.java 创建日期 2004-9-2</p>
     * <P>更新日期 2004-9-2</p>
     * <p>@author <a href="mailto:Dorian@citiz.net">Dorian</a></p>
     * <p>@version 1.0.0</p>
     */
    class LRTransListener implements PropertyChangeListener {
        public LRTransListener(Component leftComponent,Component rightComponent) {
            this.leftComponent = leftComponent;
            this.rightComponent = rightComponent;
        }
 
        public void propertyChange(PropertyChangeEvent evt) {
            if (evt.getPropertyName() == LeftRightListener.LEFT_TRAN) {
                if (leftComponent != null) {
                    //设置焦点
                    leftComponent.requestFocus();
                }
            }
            else if (evt.getPropertyName() == LeftRightListener.RIGHT_TRAN) {
                if (rightComponent != null) {
                    rightComponent.requestFocus();
                }
            }
        }
        private Component leftComponent, rightComponent;
    }// End LRTransListener Class
}// End JIPAddressField Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -