1 package camidion.chordhelper.mididevice;
5 import javax.swing.BoxLayout;
6 import javax.swing.JLabel;
7 import javax.swing.JPanel;
8 import javax.swing.event.ChangeEvent;
9 import javax.swing.event.ChangeListener;
12 * シーケンサの現在位置(分:秒)を表示するビュー
14 public class SequencerTimeView extends JPanel implements ChangeListener {
16 * シーケンサの現在位置(分:秒)を表示するビューを構築します。
17 * @param model MIDIシーケンサモデル
19 public SequencerTimeView(MidiSequencerModel model) {
20 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
21 add(timePositionLabel);
23 (this.model = model).addChangeListener(this);
26 public void stateChanged(ChangeEvent e) {
27 timeLengthLabel.setTimeInSecond(model.getMaximum()/1000);
28 timePositionLabel.setTimeInSecond(model.getValue()/1000);
30 private MidiSequencerModel model;
31 private SequencerTimeView.TimeLabel timePositionLabel = new TimePositionLabel();
32 private SequencerTimeView.TimeLabel timeLengthLabel = new TimeLengthLabel();
33 private static abstract class TimeLabel extends JLabel {
37 private int valueInSec;
42 public void setTimeInSecond(int sec) {
43 if(valueInSec != sec) setText(toTimeString(valueInSec = sec));
50 protected String toTimeString(int sec) {
51 return String.format("%02d:%02d", sec/60, sec%60);
54 private static class TimePositionLabel extends SequencerTimeView.TimeLabel {
55 public TimePositionLabel() {
56 setFont( getFont().deriveFont(getFont().getSize2D() + 4) );
57 setForeground( new Color(0x80,0x00,0x00) );
58 setToolTipText("Time position - 現在位置(分:秒)");
59 setText(toTimeString(0));
62 private static class TimeLengthLabel extends SequencerTimeView.TimeLabel {
63 public TimeLengthLabel() {
64 setToolTipText("Time length - 曲の長さ(分:秒)");
65 setText(toTimeString(0));
68 protected String toTimeString(int sec) {
69 return "/"+super.toTimeString(sec);