您正在寻找的是一条
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的东西像
JMenuItemS,只要他们有相同的
actionCommand…
话虽如此,我鼓励你不要遵循这种范例。通常,我鼓励您使用
Actions
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属性获得该引用)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)