2012-07-21 74 views
0

我在运行时创建了JTextFields数组。这是基于用户输入的。因此,为每个文本字段分配单独的操作侦听器。是否可以动态添加摆动控制动作侦听器?

我如何为TextField提供actionlisterner?

代码:

public class BucketInfoDynamic extends javax.swing.JFrame { 

    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 
    int value; 
    JPanel[] p2 ; 
    JTextField[] txtFrom; 
    JTextField[] txtTo; 
    JLabel[] lblBucket; 
    JLabel lblEnd; 

    public BucketInfoDynamic() { 
     for(;;) 
     { 
      try{ 
       String number = JOptionPane.showInputDialog("How many Bucket do you want?"); 
       value = Integer.parseInt(number); 
       if(value <= 5 && value > 1) 
        break; 
       else 
        JOptionPane.showMessageDialog(this, "Enter bucket value should greater than 1 and less than 5.\n"); 
      } 
      catch(NumberFormatException ex) 
      { 
        JOptionPane.showMessageDialog(this, "This is Not a valid number format..\n"); 
      } 
     } 
     initComponents(); 
     jPanel1.setLayout(new GridLayout(value,1,20,10)); 
     p2 = new JPanel[value]; 
     txtFrom = new JTextField[value]; 
     txtTo = new JTextField[value -1]; 
     lblBucket = new JLabel[value]; 
     lblEnd = new JLabel("And Above"); 
     this.designProcess(); 

    } 

private void designProcess() { 
     jPanel1.setSize(value * 50 ,jPanel1.getWidth()); 
     for(int i = 0; i < value; i++) 
     { 
      lblBucket[i] = new JLabel("Bucket "+i); 
      p2[i] = new JPanel(); 
      p2[i].setLayout(new GridLayout(1,3,20,10)); 
      txtFrom[i] = new JTextField(); 
      if(i == 0) 
       txtFrom[i].setText("0"); 
      txtFrom[i].setEditable(false); 
      p2[i].add(lblBucket[i]); 
      p2[i].add(txtFrom[i]); 
      if(i < value-1) 
      { 
       txtTo[i] = new JTextField(); 
       txtTo[i].setFocusTraversalKeysEnabled(false); 
       txtTo[i].addKeyListener(new java.awt.event.KeyAdapter() { 
        public void keyReleased(java.awt.event.KeyEvent evt) { 
         toKeyReleased(evt); 
       } 
      }); 
       p2[i].add(txtTo[i]); 
      } 
      else 
       p2[i].add(this.lblEnd); 

      jPanel1.add(p2[i]); 

     } 
    } 

    private void toKeyReleased(KeyEvent evt) { 
     // this.checkFormat(evt); 
     Component com = evt.getComponent(); 
     System.out.println(com.getName()); 

     if(KeyEvent.VK_TAB == evt.getKeyCode()) 
      this.checkRange(); 
    } 
} 
+1

只需将监听器添加到'JTextField' ......你已经有了它创建的代码场。它是[add](http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html#addActionListener(java.awt.event.ActionListener))的一个' ActionListener'也是如此。 – Robin 2012-07-21 07:50:00

+0

我有TextField的数组。所以我需要单独的actionlistener为每个字段 – Dhinakar 2012-07-21 07:54:14

+0

*“我已经创建了文本框”*什么是“文本框”? – 2012-07-21 16:26:01

回答

1

一个办法做到这一点是:

jTextFieldArray[index].addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // code what you want this field to do 
      } 
     }); 

过来就是: 注册一个ActionListener添加到所有JTextField并使其搜索引发该一事件(提示:ActionEvent.getSource()为您提供触发事件的组件)。

这样的:

public class Jtext { 
JTextField[] txt; 
    public Jtext() { 
     txt = new JTextField[100]; 
     int i = 0; 
     txt[i] = new JTextField(); 
     Listener l = new Listener(); 
     txt[i].addActionListener(l); 

    }  
    class Listener implements ActionListener{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      JTextField txt = (JTextField) e.getSource(); 
      if(txt.equals(YourJtextField){ 

      } 
     } 

    } 
} 

为文本框的解决方案数量有限,可能是这样的:

public class Jtext { 
JTextField[] txt; 
public static String ACTION_CMD_1 = "txt1"; 
public static String ACTION_CMD_2 = "txt2"; 
    public Jtext() { 
     txt = new JTextField[5]; 
     int i = 0; 
     txt[i] = new JTextField(); 
     Listener l = new Listener(); 
     txt[i].setActionCommand("txt" + counter); 

    }  
    class Listener implements ActionListener{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String actCommand = e.getActionCommand(); 
      if(actCommand.equals(ACTION_CMD_1)){ 
       // code 
      } 

      if(actCommand.equals(ACTION_CMD_2)){ 
       //code 
      } 
     } 

    } 
+0

每个actionLister代码可能会有所不同。 :-( – Dhinakar 2012-07-21 08:27:57

+1

你有多少个textfield ??? – 2012-07-21 08:30:36

+0

2到5个文本字段 – Dhinakar 2012-07-21 08:35:28

相关问题