【问题标题】:How to perform action on JButton upon Enter on JTextField?如何在 JTextField 上输入时对 JButton 执行操作?
【发布时间】:2013-07-15 15:02:44
【问题描述】:

我有一个JTextField 和一个JButton,当用户在JTextField 上按回车键时,必须对相应的JButton 执行操作。这是我的代码 sn-p。

我还想在输入时禁用JButton,稍后在JTextField 中发生更改时启用它

JButton jb=new JButton("Print");
JTextField jt=new JTextField(20);
jb.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent ae)
   {
     System.out.println(jt.getText());
   }
});

【问题讨论】:

    标签: java swing jbutton actionlistener jtextfield


    【解决方案1】:

    为按钮和文本字段添加相同的动作监听器:

    JButton jb = new JButton("Print");
    JTextField jt = new JTextField(20);
    ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            System.out.println(jt.getText());
        }
    }; 
    jb.addActionListener(listener);
    jt.addActionListener(listener);
    

    【讨论】:

    • 但我没有写JButton,也没有listener 参考! :(
    • 这不是您的代码 sn-p 显示的内容。如果你从一开始就这么说,我的回答会不一样。
    【解决方案2】:

    这是对您的代码的修改,我注册了一个DocumentListener 以监听JTextField 中的文本更改,并将ActionListener 添加到JTextField

        jb=new JButton("Print");
        jt=new JTextField(20);
    
        jt.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae)
            {
                jb.doClick();
            }
        });
    
        jt.getDocument().addDocumentListener(new DocumentListener(){
            public void insertUpdate(DocumentEvent de)
            {
                jb.setEnabled(true);
            }
            public void changedUpdate(DocumentEvent de)
            {
                jb.setEnabled(true);
            }
            public void removeUpdate(DocumentEvent de)
            {
                jb.setEnabled(true);
            }
        });
    
        jb.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae)
            {
                System.out.println(jt.getText());
                jb.setEnabled(false);
            }
        });
    

    【讨论】:

      【解决方案3】:

      要对按钮单击执行相同的操作,然后在 Jfield 上按输入。

      JButton jb = new JButton("Print");
      JTextField jt = new JTextField(20);
      ActionListener listener = new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
              System.out.println(jt.getText());
              // Diable Button after action performed.
              jb.setEnabled(false);
          }
      }; 
      jb.addActionListener(listener);
      jt.addActionListener(listener);
      

      // 在 JtextField 值发生任何更改后启用按钮。 JTextField 值变化监听器引用from Link

      jt.getDocument().addDocumentListener(new DocumentListener(){
              public void insertUpdate(DocumentEvent de)
              {
                  jb.setEnabled(true);
              }
              public void changedUpdate(DocumentEvent de)
              {
                  jb.setEnabled(true);
              }
              public void removeUpdate(DocumentEvent de)
              {
                  jb.setEnabled(true);
              }
          });
      

      【讨论】:

        猜你喜欢
        • 2012-09-04
        • 2015-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多