2015-06-27 90 views
-1
buttonOne = new JButton("Who are you?"); 
    buttonOne.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      nameField.setText("Taha Sabra"); 
      ageField.setText("24 years old"); 
      buttonOne.setText("Clear Me!"); 
     } 
    }); 

这是我第一次点击它时发生的情况。现在,一旦按钮显示Clear Me!,我希望能够再次单击它并清除nameField和ageField。谢谢!如何在Java中再次单击按钮时执行第二个操作?

+0

使用button.setActionCommand和getActionCommand做的工作 – Madhan

+0

或检查button.text使用的ActionListener外的布尔因为从内部类访问的变量将无法正常工作之前和之后 – Madhan

回答

1

保持一个状态变量(类字段),指示是否按钮已经被点击:

private boolean hasBeenClicked = false; 

然后改变你的actionPerformed的逻辑:

public void actionPerformed(ActionEvent arg0) { 
     if (! hasBeenClicked) { 
      nameField.setText("Taha Sabra"); 
      ageField.setText("24 years old"); 
      buttonOne.setText("Clear Me!"); 
     } else { 
      // Clear the fields 
      nameField.setText(""); 
      ageField.setText(""); 

      // Set the the text on the button to the original. 
      buttonOne.setText("Who are you?"); 
     } 
     hasBeenClicked = ! hasBeenClicked; 
    } 

这最后的操作手段如果hasBeenClickedfalse,它将变成true,如果它是true它将变成false。所以如果你愿意,你可以重复一遍。

0

你可以使用你的ActionListener内一个简单的布尔标志:

buttonOne = new JButton("Who are you?"); 
buttonOne.addActionListener(new ActionListener() { 
    boolean clicked = false; 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (clicked) { 
      nameField.setText(""); 
      ageField.setText(""); 
      buttonOne.setText("Clear me again!"); 
     } else { 
      nameField.setText("Taha Sabra"); 
      ageField.setText("24 years old"); 
      buttonOne.setText("Clear Me!"); 
      clicked = true; 
     } 
    } 
}); 
0

如果这是你想要的OT实现,你也可以使用三元运算符:

public void actionPerformed(ActionEvent arg0) { 
    nameField.setText(nameField.getText().equals("") ? "Taha Sabra" : ""); 
    ageField.setText(ageField.getText().equals("") ? "24 years old" : ""); 
    buttonOne.setText(buttonOne.getText().equals("Clear Me!") ? "Who are you?" : "Clear Me!"); 
} 
0

使用sentinelinstance variable内你的班级在两个动作之间切换。

boolean clicked = false; 

... 

buttonOne = new JButton("Who are you?"); 
buttonOne.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     if (!clicked) { 
      nameField.setText("Taha Sabra"); 
      ageField.setText("24 years old"); 
      buttonOne.setText("Clear Me!"); 
      clicked = true; 
     } else { 
      nameField.setText(""); 
      ageField.setText(""); 
      clicked = false; 
     } 
    } 
}); 
+0

必须' final'。 – Marv

+0

@Marv你是对的,这就是为什么我说使用类变量,如果更新答案,使这个更清晰 – GrahamA

+0

一个类变量?也许你的意思是一个领域? '静态'是不需要的。 – Marv

相关问题