我的目标是当有人在某个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。
[上次编辑]
我已经想通了。事实证明,我的问题与之后发生的事情发生了冲突在事件中,我刚刚取出了在刚刚打开它们后将其关闭的代码行。感谢大家的帮助。
System.out.println("Some text");
这一行文字解决了我的全部问题。再次感谢大家!你救了我的FATE游戏。
我希望您已经向apply
按钮注册了ActionListener。应该是这样的。。。
applyBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if("Physique".equals(skillGreat1JTextField.getText())) {
physStress3CheckBox.setEnabled(true);
physStress4CheckBox.setEnabled(true);
}
}
});
如果您想在单击"应用"按钮时启用/禁用复选框,您可以遵循@anoymous建议并将测试放在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);
}
}
});
你可以在这里找到一些关于监听器的指南,特别是关于文档监听器的指南。
OP此处。问题就在同一行动中。
我在按钮后面有一个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("一些文本");可以成为你最好的朋友。使用它来测试逻辑错误。
我的错误是一个逻辑错误,后来发生在我的同一个动作监听器中。希望这能帮助到任何有同样问题的人!谢谢Stack!