Проверка значения на LostFocus события

Проблема заключается в LostFocus происходит на компоненте, gainedFocus уже отправлены на следующие компоненты в SystemEventQueue. Мы должны захватить это событие, и просить в центре внимания предыдущих компонент (если есть проверка ошибки). Мы не можем использовать Toolkit.getDefaultToolkit (). GetSystemEventQueue () непосредственно удалить gainedFocus случае из-за ограничений безопасности в аплет. Это может быть сделано с invokeLater метода класса SwingUtilities.


 import java.awt.*; 

 import java.awt.event.*;

 import javax.swing.*;



 public class tswing extends JApplet {



   JTextField textfield1, textfield2;

   JLabel label1;



   public void init() {



     getContentPane().setLayout(new FlowLayout());



     //

     label1 = new JLabel("must be 'a' or 'b' ");

     textfield1 = new JTextField(5);

     getContentPane().add(label1);

     getContentPane().add(textfield1);

     textfield2 = new JTextField(5);

     getContentPane().add(textfield2);



     textfield1.addFocusListener(new FocusListener() {

        public void focusGained(FocusEvent e) {}// not needed



        public void focusLost(FocusEvent e) {



          if (!e.isTemporary() && isEnabled() ) {

            String fieldContent = textfield1.getText();

            if (!fieldContent.equals("a"&& !fieldContent.equals("b")) {

              Toolkit.getDefaultToolkit().beep();

              System.out.println("illegal value! " + fieldContent );

              SwingUtilities.invokeLater(new FocusGrabber(textfield1));         

              }

          }}

        });

     }

 }





import javax.swing.*;



public class FocusGrabber implements Runnable {

 

  private JComponent component;

 

  public FocusGrabber(JComponent component) {

   this.component = component;

  }

  

  public void run() {

   component.grabFocus();

  }

}

JDK1.3 обеспечивает новый класс, InputVerfier, которые могут быть использованы для этого.


 import java.awt.*;

 import java.util.*;

 import java.awt.event.*;

 import javax.swing.*;



 // the first JTextField expects the string "howto" as input, 

 // and will allow focus to change only if the required string

 // is typed.



 class VerifierTest extends JFrame {

  public VerifierTest () {

    JTextField tf,tf2;

    tf = new JTextField ("howto is required");



    getContentPane().add (tf, BorderLayout.NORTH);

    tf.setInputVerifier(new HowtoVerifier());



    tf2 = new JTextField ("howto come here");

    getContentPane().add (tf2, BorderLayout.SOUTH);



    addWindowListener(new WindowCloser());

  }

 



 public static void main (String [] args) {

   Frame f = new VerifierTest ();

   f.pack();

   f.show();

 }

}



class WindowCloser extends WindowAdapter {

 public void windowClosing(WindowEvent e) {

   Window win = e.getWindow();

   win.setVisible(false);

   System.exit(0);

 }

}





class HowtoVerifier extends InputVerifier {

  public boolean verify(JComponent input) {

    JTextField tf = (JTextFieldinput;

    String pass = tf.getText();

    return pass.equals("howto");

  }

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>