1 package camidion.chordhelper.midieditor;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
6 import javax.swing.JCheckBox;
7 import javax.swing.JComboBox;
8 import javax.swing.JLabel;
9 import javax.swing.JPanel;
11 import camidion.chordhelper.music.Key;
12 import camidion.chordhelper.music.Note;
17 public class KeySignatureSelecter extends JPanel implements ActionListener {
18 public JComboBox<Key> keysigCombobox = new JComboBox<Key>() {
20 for(int co5 = -Key.MAX_SHARPS_OR_FLATS ; co5 <= Key.MAX_SHARPS_OR_FLATS ; co5++)
21 addItem(new Key(co5));
22 setMaximumRowCount(getItemCount());
25 JCheckBox minorCheckbox = null;
29 * 初期値としてメジャー・マイナーの区別がある調を指定した場合、
30 * メジャー・マイナーを選択できるminorチェックボックス付きで構築されます。
33 public KeySignatureSelecter(Key key) {
34 add(new JLabel("Key:"));
36 if(key.majorMinor() != Key.MajorMinor.MAJOR_OR_MINOR) {
37 add(minorCheckbox = new JCheckBox("minor"));
38 minorCheckbox.addActionListener(this);
40 keysigCombobox.addActionListener(this);
45 public void actionPerformed(ActionEvent e) {
46 Key key = (Key)keysigCombobox.getSelectedItem();
47 keysigCombobox.setToolTipText(
48 "Key: " + key.toStringIn( Note.Language.NAME )
49 + " " + key.toStringIn( Note.Language.IN_JAPANESE )
50 + " (" + key.signatureDescription() + ")"
55 * 調の選択を、引数で指定された通りに変更します。
56 * メジャー・マイナーの区別のない調が指定された場合、
57 * minorチェックボックスは変更されず、プルダウン選択のみが変更されます。
61 public void setSelectedKey(Key key) {
62 setMajorMinor(key.majorMinor());
63 if( key.majorMinor() != Key.MajorMinor.MAJOR_OR_MINOR ) key = new Key(key.toCo5());
64 keysigCombobox.setSelectedItem(key);
67 * 選択されている調を返します。minorチェックボックスがある場合はメジャー・マイナーの区別つき、
68 * そうでない場合は区別なしの調を返します。
72 public Key getSelectedKey() {
73 Key key = (Key)keysigCombobox.getSelectedItem();
74 return minorCheckbox == null ? key : new Key(key.toCo5(), getMajorMinor());
77 private void setMajorMinor(Key.MajorMinor majorMinor) {
78 if( minorCheckbox == null || majorMinor == Key.MajorMinor.MAJOR_OR_MINOR ) return;
79 minorCheckbox.setSelected(majorMinor == Key.MajorMinor.MINOR);
81 private Key.MajorMinor getMajorMinor() {
82 return minorCheckbox == null ? Key.MajorMinor.MAJOR_OR_MINOR :
83 minorCheckbox.isSelected() ? Key.MajorMinor.MINOR : Key.MajorMinor.MAJOR;