您正在寻找的是一条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
}
}
仔细查看if-then和if-then- else语句以获取更多详细信息
与其尝试使用对按钮的引用,不如考虑使用代替的actionCommand
属性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
S,只要他们有相同的actionCommand
…
话虽如此,我鼓励你不要遵循这种范例。通常,我鼓励您使用Action
s API,但是对于您现在所处的位置,这可能有点太先进了,相反,我鼓励您利用Java的匿名类支持,例如… 。
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
getSource
属性获得该引用)