首先说明的是这个IP输入的文本框SWT来做的,是这个软件的一个类,整个软件也是SWT做的。IP输入框的基本框架已经做好,在Composite里放了4个文本框和3个Label,已经写好setText和getText方法,问题出在KeyListener上,第一找不出用什么函数来获取KeyPressed的值,第二SWT的Text没有requestFocus方法,第三因为第一个问题所以不知道要怎么写来限制其只能输入数字,麻烦大家帮帮忙,谢谢!
或者有哪位朋友有更好的办法也请告诉我,谢谢了,小弟不胜感激!

解决方案 »

  1.   

    1. 问题出在KeyListener上,第一找不出用什么函数来获取KeyPressed的值private void hookKeyboardActions(){
    text.addKeyListener(new KeyAdapter(){
    @Override
    public void keyReleased(KeyEvent e) {
    handleKeyReleased(e);
    }
    });
    }

    private void handleKeyReleased(KeyEvent e){
    if(e.character == SWT.DEL&&e.stateMask==0){
    //do something here }
    }
    2. 第二SWT的Text没有requestFocus方法 txt1.addFocusListener(new FocusAdapter() { 
                    @Override 
                    public void focusGained(FocusEvent e) { 
                    } 
                    @Override 
                    public void focusLost(FocusEvent e) { 
                        final Text t = (Text)e.getSource(); 
                        t.getDisplay().asyncExec (new Runnable () { 
                            public void run () { 
                                t.setSelection(0, 5); 
                                t.setFocus(); 
                            } 
                        });                    
                    } 
                }); 还有就是可以试试 MaskFormatter 
      

  2.   

    text.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
    e.character就是所按键对应的char
    }
    });
      

  3.   

    这样: text_4.addListener (SWT.Verify, new Listener () {
    public void handleEvent (Event e) {
    String string = e.text;
    char [] chars = new char [string.length ()];
    string.getChars (0, chars.length, chars, 0);
    for (int i=0; i<chars.length; i++) {
    if (!('0' <= chars [i] && chars [i] <= '9')) {
    e.doit = false;
    return;
    }
    }
    }
    });
      

  4.   

    下面是我写的只能输入数字的JTextField,你可以参考下import javax.swing.JTextField;   
    import javax.swing.text.PlainDocument;   
    import javax.swing.text.BadLocationException;   
    import javax.swing.text.AttributeSet;   public class VlanField extends JTextField{ 
    private static final long serialVersionUID = 1L;

     public VlanField()   
         {   
             super();   
             setDocument(new IntegerDocument());
         }
     
         public VlanField(int value)   
         {   
             this();
             this.setValue(value);   
         }  
         
         public void setValue(int value)   
         {   
             super.setText(String.valueOf(value));   
         }
         
         public void setValue(String value)   
         {   
             super.setText(value);   
         }
         
         public int getValue()   
         {   
             try   
             {   
                 return Integer.parseInt(super.getText());   
             }   
             catch(Exception e)   
             {   
                 return 0;   
             }
         }   
       
         /**   
           *   @deprecated   
           */   
       
         public void setText(String t)   
         {   
             try   
             {   
                 Integer.parseInt(t);   
                 super.setText(t);   
             }   
             catch(Exception e)
             {
              
             }   
         }   
       
         private class IntegerDocument extends PlainDocument   
         {   
         private static final long serialVersionUID = 1L;
            public void insertString(int offset,String s,AttributeSet attributeSet) throws BadLocationException   
             {   
                 boolean canInsert = false;   
                 try   
                 {   
                     Integer.parseInt(s);   
                     canInsert = true;   
                 }   
                 catch(Exception ex)
                 {
                  
                 }   
                 if(true == canInsert)   
                 {   
                     super.insertString(offset,s,attributeSet);   
                 }   
             }   
         }   }
      

  5.   

    text.addVerifyListener(new VerifyListener() {      @Override
          public void verifyText(VerifyEvent e) {
            String s = e.text;
            // Pattern pattern = Pattern.compile("^[-0-9.]"); //可以输入减号
            Pattern pattern = Pattern.compile("^[0-9.]");
            Matcher match = pattern.matcher(s);
            if (match.matches()) {
              e.doit = true;
              newText(e.start, s);
            } else if (s.length() > 0) {
              e.doit = false;
            } else {
              e.doit = true;
            }
          }
        });
      

  6.   

    codes.addKeyListener(new KeyAdapter()
    {
    public void keyPressed(KeyEvent event)
    {
    String str = Character.toString(event.character);
    event.doit = Character.toString(event.character).matches("^[0-9x]{18}");
    }
    });
    正确与否?为什么执行不了?哪位高手给指点哈,谢谢