【问题标题】:Make button recognize text in JTextField使按钮识别 JTextField 中的文本
【发布时间】:2014-04-23 14:48:53
【问题描述】:

我的目标是当有人在某个 JTextField 中键入单词“Physique”时启用两个复选框。

所以:

Press button
Button reads text in JTextField
if text in field is equal to Physique
then enable Checkboxes Three and Four.

但是,当在 JTextField 中输入文本时,我无法使其响应

String greatOne = skillGreat1JTextField.getText();

if ( greatOne.equals( "Physique" ) ) {

        physStress3CheckBox.setEnabled( true );
        physStress4CheckBox.setEnabled( true );

    } 

当我按下应用按钮时触发,但出于某种原因。这个 if 语句似乎没有执行,因为在将 Physique 输入到 JTextField 时,复选框从未启用

有人知道为什么这不会执行吗?我很茫然。

[编辑]

这里还有一些代码。当我按下一个名为 Apply 的按钮时,这应该会执行。

public void applyJButtonActionPerformed( ActionEvent event ) {

    String greatOne = skillGreat1JTextField.getText();

    if ( greatOne.equals( "Physique" ) ) {

        physStress3CheckBox.setEnabled( true );
        physStress4CheckBox.setEnabled( true );

    } 
}

这是 IF 语句,下面是按钮的代码:

applyJButton.addActionListener(
        new ActionListener() {
            public void actionPerformed( ActionEvent event ) {
                applyJButtonActionPerformed( event );
            }
        }
    );

另外,回复 Rudi,我应该使用 OnClickListener 吗?我一直在使用 ActionListener。

[最后编辑]

我想通了。事实证明,我的问题与事件中稍后发生的事情发生冲突,我只是在它刚刚打开之后取出了 Turning them back off 的代码行他们上。感谢大家的帮助。

System.out.println("Some text");

这一行文字解决了我的整个问题。再次感谢大家!你保存了我的 FATE 游戏。

【问题讨论】:

  • 澄清一下,上面的代码在哪里?它在按钮的 OnClickListener 内吗?另外,你有什么例外吗?如果你把System.out.println("Is running")放到if语句中,是不是打印出来了?
  • 提供更多代码,你在哪里调用这个if语句?
  • 编辑了我原来的帖子以反映额外的问题。
  • 我认为 OP 的意思是 tick 复选框。在这种情况下,他应该使用setSelected(true)。
  • 感谢鲁迪和匿名者。 System.out.println("一些文本");解决了我的问题。只是一个简单的逻辑错误。谢谢大家。

标签: java if-statement checkbox jtextfield


【解决方案1】:

我希望你已经为apply 按钮注册了一个ActionListener。应该是这样的……

applyBtn.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
             if("Physique".equals(skillGreat1JTextField.getText())) {
                 physStress3CheckBox.setEnabled(true);
                 physStress4CheckBox.setEnabled(true);
             }
         }
      });

【讨论】:

  • 虽然您的代码很好,但问题中暗示他们已经有类似的设置。 This triggers when I press an Apply button
  • @Rudi 说的是一回事。实际正确实施是另一回事。我只是想确保 OP 注册了一个正确的 ActionListener 因为毕竟它有unresponsive 标签。
  • 我已经在 EDIT 中发布了 Button 的代码。正确应用了 actionlistener,other 操作是否正常。但是那个 if 语句似乎没有运行,即使测试器是真的。
【解决方案2】:

如果您想启用/禁用复选框当您单击“应用”按钮时,您可以按照@anonymous 的建议并在ActionListener 上进行测试。

如果您想启用/禁用复选框在输入某些文本时,您必须在文本字段上放置一个侦听器。基本上,每次文本更改时,组件都必须触发一个事件来检查单词并启用/禁用复选框。你可以在代码的 init 部分做这样的事情:

skillGreat1JTextField.getDocument().addDocumentListener(new DocumentListener() {

   @Override
   public void removeUpdate(DocumentEvent arg0) {
      checkWord();
   }

   @Override
   public void insertUpdate(DocumentEvent arg0) {
      checkWord();
   }

   @Override
   public void changedUpdate(DocumentEvent arg0) {
      checkWord();
   }

   private void checkWord() {
      String greatOne = skillGreat1JTextField.getText();
      if (greatOne.equals("Physique")) {
         physStress3CheckBox.setEnabled(true);
         physStress4CheckBox.setEnabled(true);
      }
   }
});

您可以找到一些关于侦听器 here,特别是文档侦听器 here 的指南。

【讨论】:

    【解决方案3】:

    在这里。问题出在同一个操作中。

    我在按钮后面有一个 IF 语句(当时这似乎并不重要),它引用了一个可以解锁所有技能按钮的不同复选框:

    if ( !unlockSkillsJCheckBox.isSelected() ) {
            skillSuperb1JTextField.setEditable( false );
            skillSuperb2JTextField.setEditable( false );
            skillSuperb3JTextField.setEditable( false );
            skillSuperb4JTextField.setEditable( false );
            skillSuperb5JTextField.setEditable( false );
            skillGreat2JTextField.setEditable( false );
            skillGreat3JTextField.setEditable( false );
            skillGreat4JTextField.setEditable( false );
            skillGreat5JTextField.setEditable( false );
            skillGood3JTextField.setEditable( false );
            skillGood4JTextField.setEditable( false );
            skillGood5JTextField.setEditable( false );
            skillFair4JTextField.setEditable( false );
            skillFair5JTextField.setEditable( false );
            skillAverage5JTextField.setEditable( false );
    
            consEXTRA2JTextField.setEditable( false );
    
            physStress3CheckBox( false ); //THE PROBLEM LIES HERE.
            physStress4Checkbox( false ); //THE PROBLEM LIES HERE.
    
            mentStress3CheckBox.setEnabled( false );
            mentStress4CheckBox.setEnabled( false );
    
        }
    

    if 语句运行良好,并按预期运行。但是因为那两条线,一开机就又右转又关机了。

    虽然我确实知道 System.out.println("Some text");可以成为你最好的朋友。使用它来测试逻辑错误。

    我的错误是稍后在我拥有的同一个动作侦听器中发生的逻辑错误。 希望这可以帮助任何遇到我同样问题的人!谢谢堆栈!

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2016-08-19
      • 2020-05-13
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多