2013-01-07 217 views
2

我有一个带有Actionlistener的JTextField。现在,当我按下回车键时,我想让它做某些事情。我正在使用共享的ActionListener,所以试图在JTextField上执行getSource,但它不起作用!希望任何人都能帮忙。Enter key JTextField

JTextField txtProductAantal = new JTextField(String.valueOf(WinkelApplication.getBasket().getProductAmount(productdelete))); 
      txtProductAantal.setBounds(340, verticalPosition + i * productOffset, 40, 20); 
      txtProductAantal.addActionListener(this); 
      add(txtProductAantal); 

public void actionPerformed(ActionEvent event) { 

     if (event.getSource() == btnEmptyBasket) { 
      WinkelApplication.getBasket().empty(); 
      WinkelApplication.getInstance().showPanel(new view.CategoryList()); 
     } 

     if(event.getSource() == txtProductAantal){ 
      String productgetal = txtProductAantal.getText(); 
      txtProductAantal.setText(productgetal); 
      WinkelApplication.getInstance().showPanel(new view.Payment()); 
     } 
    } 
+2

1)为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 2)'txtProductAantal.setBounds(..)'使用布局来避免接下来的17个问题。 –

回答

3
  • 必须创造一个比较

例如

public void actionPerformed(ActionEvent event) { 
     Object source = event.getSource(); 
     if (source == btnEmptyBasket) { 
      //........... 
     } else if (source == txtProductAantal) { 
      //........... 
     } else { 

     } 
    } 
  • 一个临时Object或只有JTextFields(避免instanceofif - else语句),你可以铸造对象到JTextField directl ÿ

JTextField source = (JTextField) event.getSource();

EDIT,

  • one from the next adviced 17 problems.

  • please to read suggestion by @Andrew Thompson, again

    • 1) For better help sooner, post an SSCCE.

    • 2) txtProductAantal.setBounds(..)

    • Use layouts to avoid the next 17 problems.

我的代码工作,因为我预料

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class JTextFieldAndActionListener implements ActionListener { 

    private JFrame frm = new JFrame("JTextFieldAndActionListener"); 
    private JTextField one = new JTextField(10); 
    private JTextField two = new JTextField(); 
    private JTextField three = new JTextField(); 

    public JTextFieldAndActionListener() { 
     one.addActionListener(this); 
     two.addActionListener(this); 
     three.addActionListener(this); 
     frm.setLayout(new GridLayout()); 
     frm.add(one); 
     frm.add(two); 
     frm.add(three); 
     frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frm.setLocation(400, 300); 
     frm.pack(); 
     frm.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent event) { 
     Object source = event.getSource(); 
     if (source == one) { 
      System.out.println("firing from JTextField one"); 
     } else if (source == two) { 
      System.out.println("firing from JTextField two"); 
     } else if (source == three) { 
      System.out.println("firing from JTextField three"); 
     } else { 
      System.out.println("something went wrong"); 
     } 
    } 

    public static void main(String[] args) { 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JTextFieldAndActionListener ie = new JTextFieldAndActionListener(); 
      } 
     }); 
    } 
} 

print_out我的ENTER键

run: 
firing from JTextField one 
firing from JTextField two 
firing from JTextField three 
BUILD SUCCESSFUL (total time: 15 seconds) 
+0

仍然不起作用。我已经把一个系统放在文本框的if上,但是它只是对输入按钮没有反应。 – DaViDa

+0

@DaViDa:它确实工作得很好。您可以通过查看[** link **](http://gagandeepbali.uk.to/gaganisonline/swing/downloads/Example.java)来自己测试[SSCCE](http://sscce.org/) 。 –

+1

我觉得别的是错的,这就是为什么它不起作用,但感谢所有为我展示这样做的好方法! – DaViDa

相关问题