Java: отключить дублирование нажатий клавиш и одновременное получение двух разных нажатий клавиш - PullRequest
0 голосов
/ 11 октября 2018

Я занимаюсь разработкой программного обеспечения для симуляции пианино в образовательных целях.При получении пользовательского ввода я должен привязать клавиши на клавиатуре к высотам.Если удерживать нажатой клавишу, это иногда приводит к созданию дублирующих нажатий клавиш. Я хочу убедиться, что нажатие клавиши удерживает ноту, а не повторяет ее очень быстро.Далее я хочу записать заметки, сохраняющие сроки.Каков наилучший способ добиться этого?

Вот мой код:

public class PianoApplet extends Applet {

        @Override
    public void init() {
            HashSet<Character> set=new HashSet();
        final Midi midi;
        try {
            midi = new Midi();
        } catch (MidiUnavailableException e1) {
            e1.printStackTrace();
            return;
        }
        // this is a standard pattern for associating method calls with GUI events
        // the call to the constructor of KeyAdapter creates an object of an
        // anonymous subclass of KeyAdapter, whose keyPressed method is called
        // when a key is pressed in the GUI
        addKeyListener(new KeyAdapter() {
                        @Override
            public void keyPressed(KeyEvent e) {
                char key = (char) e.getKeyCode();
                                set.add(key);
                                //for mset.iterator();

                switch (key) {
                case '1':
                    midi.beginNote(new Pitch(0).toMidiFrequency());
                                    //midi.play(1, 1000, Midi.DEFAULT_INSTRUMENT);
                                    setBackground(Color.red);
                    return;
                case '2':
                    midi.beginNote(new Pitch(1).toMidiFrequency());
                    setBackground(Color.green);
                    return;
                case '3':
                    midi.beginNote(new Pitch(2).toMidiFrequency());
                    setBackground(Color.blue);
                    return;
                                case '4':
                    midi.beginNote(new Pitch(3).toMidiFrequency());
                    setBackground(Color.MAGENTA);
                    return;
                                case '5':
                    midi.beginNote(new Pitch(4).toMidiFrequency());
                    setBackground(Color.yellow);
                    return;
                                case '6':
                    midi.beginNote(new Pitch(5).toMidiFrequency());
                    setBackground(Color.cyan);
                    return;
                                case '7':
                    midi.beginNote(new Pitch(6).toMidiFrequency());
                    setBackground(Color.ORANGE);
                    return;
                                case '8':
                    midi.beginNote(new Pitch(7).toMidiFrequency());
                    setBackground(Color.GRAY);
                    return;
                                case '9':
                    midi.beginNote(new Pitch(8).toMidiFrequency());
                    setBackground(Color.pink);
                                return;
                                case '0':
                    midi.beginNote(new Pitch(9).toMidiFrequency());
                    setBackground(Color.red);
                                return;
                                case '-':
                    midi.beginNote(new Pitch(10).toMidiFrequency());
                    setBackground(Color.blue);
                                return;
                                case '=':
                    midi.beginNote(new Pitch(11).toMidiFrequency());
                    setBackground(Color.white);
                                return;
                                case 'I':
                                    System.out.println("GEdrtrfhftgh");
                                    midi.changeInstrument();



                }
            }
        });

        addKeyListener(new KeyAdapter() {
                        @Override
            public void keyReleased(KeyEvent e) {
                char key = (char) e.getKeyCode();
                switch (key) {
                case '1':
                                 midi.endNote(1000);
                    midi.endNote(new Pitch(0).toMidiFrequency());
                    return;
                case '2':
                    midi.endNote(new Pitch(1).toMidiFrequency());
                    return;
                case '3':
                    midi.endNote(new Pitch(2).toMidiFrequency());
                    return;
                                case '4':
                    midi.endNote(new Pitch(3).toMidiFrequency());
                    return;
                                case '5':
                    midi.endNote(new Pitch(4).toMidiFrequency());
                    return;
                                case '6':
                    midi.endNote(new Pitch(5).toMidiFrequency());
                    return;
                                case '7':
                    midi.endNote(new Pitch(6).toMidiFrequency());
                    return;
                                case '8':
                    midi.endNote(new Pitch(7).toMidiFrequency());
                    return;
                                case '9':
                    midi.endNote(new Pitch(8).toMidiFrequency());
                    return;
                                case '0':
                    midi.endNote(new Pitch(9).toMidiFrequency());
                    return;
                                case '-':
                    midi.endNote(new Pitch(10).toMidiFrequency());
                    return;
                                case '=':
                    midi.endNote(new Pitch(11).toMidiFrequency());
                    return;
                                case 'i':
                                    setBackground(Color.BLACK);
                                    Midi.DEFAULT_INSTRUMENT=Instrument.ACCORDION.next();
                                return;
                }
            }
        });
    }   

}
...