有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java输入键JTextField

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

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());
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    • 必须创建一个临时Object进行比较

    比如

       public void actionPerformed(ActionEvent event) {
            Object source = event.getSource();
            if (source == btnEmptyBasket) {
               //...........
            } else if (source == txtProductAantal) {
               //........... 
            } else {
    
            }
        }
    
    • 或者只有JTextFields(在if - else语句中避免instanceof)可以直接将对象强制转换为JTextField

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

    编辑

    • 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();
                }
            });
        }
    }
    

    按回车键打印我

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