あなたが探しているのはif-then-else if-then
声明です。
ActionListener
基本的に、これまで行ってきたように、3 つのボタンすべてに を追加します...
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
}
}
また、 for が同じである限り、 s のActionListener
ようなものを再利用できることも意味します...JMenuItem
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
プロパティを介して取得できるため) 。