2017-11-21 120 views
5

Konsol penceresindeki temel ok tuşu hareketini gerçekleştirmenin bir yolunu bulmaya çalışıyorum. Sadece bir anahtar deyimi ve bazı değişkenler kullanan bir C# betiğine rastladım, ancak öğretmenim Java'yı kullanmakta ısrar ediyor.Konsol penceresindeki temel ok tuşu hareketi java ile nasıl uygulanır?

Diğer bazı iletilerden yanıtların hepsi, JNA ve/veya Jline gibi belirli (yanlışsa beni düzelt) "çerçeveler" yüklemediğiniz sürece Java'da mümkün olmadığını söylemiş görünüyordu, ancak yeni başlayanlar arasında hiçbir fikrim yok. Bu şeyler bile demek.

Şimdi hocam bunu yapabilirdik düşünme için bir aptal söylemeden önce, o edilecek ok anahtar hareketi demedim, ben sadece o serin :)

+2

Bir süredir merak ettiğim bir şey olduğu için araştırdım. Başkalarının bunu neden reddettiğini görebilirim (hiçbir girişim yoktur), fakat ilginç, programlama ile ilgili ve OP'nin bazı araştırmalar yaptığını gösteriyor. – byxor

+0

, KeyEvent öğesini, aynı mekanizma C# 'de kullanıldı. Anahtarınız algılanan KeyEvent'i yapıyor mu? Daha fazla açıklamaya ihtiyacınız varsa, bir cevap ekleyeceğim –

cevap

3

Bu daha zordur olacağını düşünmüştüm Göründüğünden daha çok, Java'nın platformlar boyunca çalıştığı yol yüzünden. Bir iki sorun vardır Şimdi

InputStream in = System.in; 

    int next = 0; 
    do { 
     next = in.read(); 
     System.out.println("Got " + next); 
    } while (next != -1); 

: klavyeden okumak için temel çözüm, Stdin kullanmak şöyle etmektir olduğu gibi bu sonraki karakteri yazdırmaz Unix platformlarda

  1. basıldıktan sonra ancak işletim sistemi varsayılan olarak girdiyi varsayılan olarak arabellekte ettiğinden basıldığında,
  2. Ok tuşları için ascii kodu yoktur, bunun yerine kullanılan terminal emülatörüne bağlı olarak çıkış dizileri denir. Mac yukarıdaki kodu çalıştırırsam ve Yukarı-Ok tuşlarına basarsam ve geri dönüş anahtarını alırsam Aşağıdaki çıkışı: Yalnızca unix platformları hedef alan ise

    Got 27 // escape 
    Got 91 
    Got 65 
    Got 10 // newline 
    

bu çevrede iyi bir platform bağımsız bir yolu yoktur, javacurses yardımcı olabilir.