IP控件

本文介绍了一个使用Java Swing实现的IP地址输入面板组件。该组件能够验证用户输入的IPv4地址的有效性,并通过按钮获取或设置IP地址。此外,文章还详细介绍了组件的工作原理和实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.StringTokenizer;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class IpTextPanel extends JPanel{

    
/**
     * init a IpTextPanel instance
     * 
@param frame parent JFrame
     
*/

    
public IpTextPanel(JFrame frame){
        
super();
        
this.frame = frame;
        seg1 
= new IpTextField(3,frame,1,255);
        seg2 
= new IpTextField(3,frame,0,255);
        seg3 
= new IpTextField(3,frame,0,255);
        seg4 
= new IpTextField(3,frame,1,255);
        setLayout(
new FlowLayout(FlowLayout.CENTER,3,3));
        add(seg1);
        add(
new JLabel("."));
        add(seg2);
        add(
new JLabel("."));
        add(seg3);
        add(
new JLabel("."));
        add(seg4);
    }

    
    
/**
     * set an ip address,it won't check the ip is valid or not
     * 
@param ip address type 
     
*/

    
public void setText(String ip){
        StringTokenizer st 
= new StringTokenizer(ip,".");
        seg1.setText(st.nextToken());
        seg2.setText(st.nextToken());
        seg3.setText(st.nextToken());
        seg4.setText(st.nextToken());
    }

    
    
/**
     * clear the ip address
     
*/

    
public void clear(){
        seg1.setText(
"");
        seg2.setText(
"");
        seg3.setText(
"");
        seg4.setText(
"");
    }

    
    
/**
     * get the ip address content
     * 
@return ipaddress String value
     
*/

    
public String getText(){
        
if(seg1.getText().equals("")||seg2.getText().equals("")||seg3.getText().equals("")||seg4.getText().equals("")){
            JOptionPane.showMessageDialog(frame,
"请输入完整","WARNING",JOptionPane.WARNING_MESSAGE);
            
return null;
        }
else{
            
return Integer.parseInt(seg1.getText().trim())+"."+Integer.parseInt(seg2.getText().trim())+"."+Integer.parseInt(seg3.getText().trim())+"."+Integer.parseInt(seg4.getText().trim());
        }

    }

    
    
private JFrame frame = null;
    
private IpTextField seg1 = null;
    
private IpTextField seg2 = null;
    
private IpTextField seg3 = null;
    
private IpTextField seg4 = null;

    
    
public static void main(String[] args){
        JFrame frame 
= new JFrame();
        frame.getContentPane().setLayout(
new BorderLayout());
        
final IpTextPanel pane = new IpTextPanel(frame);
        frame.getContentPane().add(pane,BorderLayout.CENTER);
        
        JPanel buttonPane 
= new JPanel();
        JButton getText 
= new JButton("getText");
        JButton setText 
= new JButton("setText");
        
        buttonPane.setLayout(
new FlowLayout(FlowLayout.CENTER,3,3));
        buttonPane.add(getText);
        buttonPane.add(setText);
        
        frame.getContentPane().add(buttonPane,BorderLayout.SOUTH);
        
        frame.setLocation(
400,300);
        frame.setSize(
400,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(
true);
        
        getText.addActionListener(
new ActionListener(){

            
public void actionPerformed(ActionEvent e) {
                System.out.println(pane.getText());
            }

            
        }
);
        
        setText.addActionListener(
new ActionListener(){

            
public void actionPerformed(ActionEvent e) {
                pane.setText(
"15.0.33.499");
                
//pane.clear();
            }

            
        }
);
        
    }

    
}




//************************************************************************************************

import java.awt.Component;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class IpTextField extends JTextField {

    
private int min = 0;// min value

    
private int max = 255;// max value

    IpSegDocument document 
= null;

    
public IpTextField(int columns, JFrame frame, int min, int max) {
        
super(columns);
        
this.min = min;
        
this.max = max;
        setDocument(document 
= new IpSegDocument(frame, columns, min, max));
    }


    
public int getMax() {
        
return max;
    }


    
public void setMax(int max) {
        
this.max = max;
        
if (document != null{
            document.setMax(max);
        }

    }


    
public int getMin() {
        
return min;
    }


    
public void setMin(int min) {
        
this.min = min;
        
if (document != null{
            document.setMin(min);
        }

    }

}


class IpSegDocument extends PlainDocument {

    
private int limit;

    
private int min;

    
private int max;

    Component parentComponent;

    
public IpSegDocument(Component parentComponent, int limit, int min, int max) {
        
super();
        
this.parentComponent = parentComponent;
        
this.limit = limit;
        
this.min = min;
        
this.max = max;
    }


    
/**
     * offset 输入位置 str 输入字符串.有多个输入的情况,如粘贴剪贴板中的内容 attr 总是null
     
*/

    
public void insertString(int offset, String str, AttributeSet attr)
            
throws BadLocationException {
        
if (str == null{
            
return;
        }

        
if (((getText(0, getLength()).trim()).length() + str.length()) <= limit) {

            
char[] upper = str.toCharArray();
            
int length = 0;
            
for (int i = 0; i < upper.length; i++{
                
if (upper[i] >= '0' && upper[i] <= '9'{
                    upper[length
++= upper[i];
                }

            }

            String valueStr 
= getText(0, offset) + new String(upper, 0, length)
                    
+ getText(offset, getLength() - offset).trim();
            
if (!valueStr.equals("")) {
                
int value = Integer.parseInt(valueStr.trim());
                
if (value >= min && value <= max) {
                    
super.remove(0, getLength());
                    
super.insertString(0, String.valueOf(value), attr);
                }
 else {
                    
if (parentComponent == null{
                        parentComponent 
= JOptionPane.getRootFrame();
                    }

                    JOptionPane.showMessageDialog(parentComponent, 
"非法输入",
                            
"WARNING", JOptionPane.WARNING_MESSAGE);
                    
super.remove(0, getLength());
                }

            }


        }

    }


    
public int getLimit() {
        
return limit;
    }


    
public void setLimit(int limit) {
        
this.limit = limit;
    }


    
public int getMax() {
        
return max;
    }


    
public void setMax(int max) {
        
this.max = max;
    }


    
public int getMin() {
        
return min;
    }


    
public void setMin(int min) {
        
this.min = min;
    }

}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值