2011-12-20 2 views
0

Я написал класс в Java для JTextField Focus Listener, и я не знаю, как написать этот класс как общий класс. После того как я написал общий класс, он должен использоваться всеми JTextFields, как я могу это сделать, пожалуйста, скажите мне путь через кодирование. Как написать общий класс для этого следующий код:Создать общий класс для java-программы

package javaapplication7; 
import java.awt.FlowLayout; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.text.JTextComponent; 

public class testfocuss{ 
    public static void main(String[] argv) throws Exception { 

    JTextField component = new JTextField(20); 
    JTextField component1 = new JTextField(20); 
    JTextField component2 = new JTextField(20); 
    JTextField component3 = new JTextField(20); 
    component.addFocusListener(new MyFocusListener()); 
    component1.addFocusListener(new MyFocusListener()); 
    component2.addFocusListener(new MyFocusListener()); 
     component3.addFocusListener(new MyFocusListener()); 
    JFrame f = new JFrame(); 
    f.layout(new FlowLayout()); 
    f.add(component1); 
    f.add(component); 
    f.add(component2); 
     f.add(component3); 
    f.pack(); 
    f.setVisible(true); 

    } 
} 
class MyFocusListener extends FocusAdapter { 
    //boolean showingDialog = false; 

    public void focusGained(FocusEvent evt) { 
    final JTextComponent c = (JTextComponent) evt.getSource(); 
    String s = c.getText(); 
    c.requestFocus(); 
    c.selectAll(); 

    for (int i = 0; i < s.length(); i++) { 
    if (!Character.isDigit(s.charAt(i))) { 
    c.setSelectionStart(i); 
     c.setSelectionEnd(i); 
     break; 
    } 
    } 
    } 

    public void focusLost(FocusEvent evt) { 
    final JTextComponent c = (JTextComponent) evt.getSource(); 
    String s = c.getText(); 

    if (evt.isTemporary()) { 
    return; 
    } 
    for (int i = 0; i < s.length(); i++) { 
    if (!Character.isDigit(s.charAt(i))) { 
     //System.out.println("must only contain digits"); 
     c.requestFocus(); 
     c.selectAll(); 
     break; 
     } 
    } 

} 
} 
+1

Что именно вы хотите сделать общий? Ваш слушатель фокуса уже работает для всех JTextComponents. – socha23

+0

Это работает правильно. Как написать focuslistener как общий класс? И как использовать этот общий класс в какой-то другой программе с JTextField. – Ayesha

+0

+1, нет необходимости в дженериках. Экземпляром до кастинга было бы хорошо. –

ответ

1

Попробуйте один

package javaapplication7; 

    import java.awt.FlowLayout; 
    import java.awt.event.FocusAdapter; 
    import java.awt.event.FocusEvent; 
    import javax.swing.JFrame; 
    import javax.swing.JTextField; 
    import javax.swing.text.JTextComponent; 

    public class testfocuss { 
     public static void main(String[] argv) throws Exception { 

      JTextField component = new JTextField(20); 
      JTextField component1 = new JTextField(20); 
      JTextField component2 = new JTextField(20); 
      JTextField component3 = new JTextField(20); 
      MyFocusListener l = new MyFocusListener(); 
      component.addFocusListener(l); 
      component1.addFocusListener(l); 
      component2.addFocusListener(l); 
      component3.addFocusListener(l); 
      JFrame f = new JFrame(); 
      f.setLayout(new FlowLayout()); 
      f.add(component1); 
      f.add(component); 
      f.add(component2); 
      f.add(component3); 
      f.pack(); 
      f.setVisible(true); 

     } 
    } 

    class MyFocusListener<C extends JTextComponent> extends FocusAdapter { 
     // boolean showingDialog = false; 

     public void focusGained(FocusEvent evt) { 
      final C c = (C) evt.getSource(); 
      String s = c.getText(); 
      c.requestFocus(); 
      c.selectAll(); 

      for (int i = 0; i < s.length(); i++) { 
       if (!Character.isDigit(s.charAt(i))) { 
        c.setSelectionStart(i); 
        c.setSelectionEnd(i); 
        break; 
       } 
      } 
     } 

     public void focusLost(FocusEvent evt) { 
      final C c = (C) evt.getSource(); 
      String s = c.getText(); 

      if (evt.isTemporary()) { 
       return; 
      } 
      for (int i = 0; i < s.length(); i++) { 
       if (!Character.isDigit(s.charAt(i))) { 
        // System.out.println("must only contain digits"); 
        c.requestFocus(); 
        c.selectAll(); 
        break; 
       } 
      } 

     } 
    } 

Примечание: Ваш слушатель cappable использовать несколько раз.

0

Я не думаю, что ваш код нуждается в каких-либо дженериках; MyFocusListener уже работает для всех JTextComponents, а не только JTextFields, и он не должен работать ни для каких других классов, поскольку он использует методы, объявленные в JTextComponent. Вы уже можете использовать его в других приложениях.

Если вы все еще хотите, чтобы сделать использование слушателем дженерики (домашние задания?), Используйте:

class MyFocusListener<T extends JTextComponent> extends FocusAdapter { 

    public void focusGained(FocusEvent evt) { 
     final T c = (T)evt.getSource(); 
     String s = c.getText(); 
     c.requestFocus(); 
     c.selectAll(); 

     for (int i = 0; i < s.length(); i++) { 
      if (!Character.isDigit(s.charAt(i))) { 
       c.setSelectionStart(i); 
       c.setSelectionEnd(i); 
       break; 
      } 
     } 
    } 

    public void focusLost(FocusEvent evt) { 
     final T c = (T) evt.getSource(); 
     String s = c.getText(); 

     if (evt.isTemporary()) { 
      return; 
     } 
     for (int i = 0; i < s.length(); i++) { 
      if (!Character.isDigit(s.charAt(i))) { 
      c.requestFocus(); 
       c.selectAll(); 
       break; 
      } 
     } 
    } 

} 
Смежные вопросы