我试图用三个按钮制作一个秒表,"开始","暂停"和"停止"。我的讲师只教我们如何将动作监听器设置为两个按钮。如何将动作侦听器设置为三个按钮?这是我到目前为止的编码
JButton startButton = new JButton("Start");
JButton stopButton = new JButton("Stop");
JButton pauseButton = new JButton("Pause");
startButton.addActionListener(this);
stopButton.addActionListener(this);
public void actionPerformed(ActionEvent actionEvent) {
Calendar aCalendar = Calendar.getInstance();
if (actionEvent.getActionCommand().equals("Start")){
start = aCalendar.getTimeInMillis();
aJLabel.setText("Stopwatch is running...");
} else {
aJLabel.setText("Elapsed time is: " +
(double) (aCalendar.getTimeInMillis() - start) / 1000 );
}
}
我还没有为我的" Pause"制作任何动作听众。功能还没有,因为我不知道如何暂停计时器。但是在我弄清楚如何暂停之前,我想将动作链接到按钮。
答案 0 :(得分:3)
您要找的是if-then-else if-then
声明。
基本上,将ActionListener
添加到您正在执行的所有三个按钮...
JButton startButton = new JButton("Start");
JButton stopButton = new JButton("Stop");
JButton pauseButton = new JButton("Pause");
startButton.addActionListener(this);
stopButton.addActionListener(this);
pauseButton.addActionListener(this);
然后提供if-else-if
系列条件来测试每种可能的事件(您期望的)
public void actionPerformed(ActionEvent e) {
Calendar aCalendar = Calendar.getInstance();
if (e.getSource() == startButton){
start = aCalendar.getTimeInMillis();
aJLabel.setText("Stopwatch is running...");
} else if (e.getSource() == stopButton) {
aJLabel.setText("Elapsed time is: " +
(double) (aCalendar.getTimeInMillis() - start) / 1000 );
} else if (e.getSource() == pauseButton) {
// Do pause stuff
}
}
仔细查看The if-then and if-then-else Statements了解更多详情
您可以考虑使用actionCommand
的{{1}}属性,而不是尝试使用对按钮的引用,这意味着您无需引用原始按钮。 ..
AcionEvent
这也意味着您可以重复使用public void actionPerformed(ActionEvent e) {
Calendar aCalendar = Calendar.getInstance();
if ("Start".equals(e.getActionCommand())){
start = aCalendar.getTimeInMillis();
aJLabel.setText("Stopwatch is running...");
} else if ("Stop".equals(e.getActionCommand())) {
aJLabel.setText("Elapsed time is: " +
(double) (aCalendar.getTimeInMillis() - start) / 1000 );
} else if ("Pause".equals(e.getActionCommand())) {
// Do pause stuff
}
}
来处理ActionListener
之类的内容,只要它们具有相同的JMenuItem
...
现在,说了这些,我建议你不要遵循这个范例。通常情况下,我建议您使用actionCommand
的API,但这对于您现在所处的位置来说可能有点过于先进,相反,我会鼓励您利用Java's anonymous class支持,例如....
Action
这将每个按钮的责任隔离到单个startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
start = aCalendar.getTimeInMillis();
aJLabel.setText("Stopwatch is running...");
}
});
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
aJLabel.setText("Elapsed time is: "
+ (double) (aCalendar.getTimeInMillis() - start) / 1000);
}
});
pauseButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Do pause stuff
}
});
,这样可以更容易地查看正在发生的事情以及何时需要,可以毫无顾虑地修改它们或影响其他按钮。
它也不需要维护对按钮的引用(因为它可以通过ActionListener
ActionEvent
属性获得)
答案 1 :(得分:2)
如果您不想实现ActionListener,可以像这样在按钮中添加匿名监听器:
JButton startButton = new JButton("Start");
JButton stopButton = new JButton("Stop");
JButton pauseButton = new JButton("Pause");
startButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//start action logic here
}
});
stopButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//stop action logic here
}
});
pauseButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
//action logic here
}
});
这个解决方案必须工作:)
答案 2 :(得分:0)
创建按钮后,您需要添加的所有内容。
startButton.setActionCommand("Start");
stopButton.setActionCommand("Stop");
pauseButton.setActionCommand("Pause");
并且在actionPerformed方法中使用它。
switch(actionEvent.getActionCommand())
{
// cases
}