سؤال

g'day كل شيء،

لدي مشروع وحدة التحكم حيث يهدف المستخدم، يضغط المستخدم على مفاتيح اتجاه لوحة المفاتيح (لوحة المفاتيح غير الرقمية) لنقل الصورة الرمزية. أواجه صعوبة في الترميز للتحقق من الضغط على هذه المفاتيح. في Pascal، كان من السهل بما فيه الكفاية لاستخدام "ReadKey" ورمز، على سبيل المثال، مقابل # 80 لأجهزة KeyPress لأسفل. ومع ذلك، فإنني أعتز بكيفية تنفيذ نفس الوظيفة في Java، على الرغم من أنني أعتقد أنني أفهم استخدام System.in و BufferedInputstream.

هل يمكن لأي شخص أن يساعدني؟ أفكارك أو تلميحاتك موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

مسألة دعم وحدة التحكم في جافا معروفة جيدا، لست متأكدا من أن هذا ممكن.

لم يكن هذا ممكنا في البداية مع SYSTEM.IN لأنها كانت تستخدم في وضع الأساس.

تم إضافة Sun في نهاية المطاف فئة Java.io.io.console.

إليك Javadocs:http://java.sun.com/javase/6/docs/api/java/io/console.html.

بمجرد الحصول على وحدة التحكم (أعتقد من System.Console)، يمكنك الحصول على قارئ وربما قراءة الأحرف منه، لكنني لست متأكدا مما إذا كان يتضمن مفاتيح.

بشكل عام، من المفترض أن تستخدم التأرجح أو AWT إذا كنت تريد الوصول إلى لوحة المفاتيح، وهو سخيف.

اعتبارا من عام 2007، كان هناك طلب ميزة حول هذا الموضوع: هنا

نصائح أخرى

إذا لم يعمل java.io.console بالنسبة لك (لم أحاول ذلك)، فحاول جين. وبعد لقد استخدمتها لحل مشكلة مماثلة غامضة.

لسوء الحظ، هذا غير ممكن بطريقة محمولة:

http://forums.sun.com/thread.jspa؟threadid=5351637&messageid=10526512

على النوافذ، القراءة من system.in سوف كتلة حتى enter يتم الضغط عليه، حتى عندما لا تستخدم BufferedReader. وبعد سوف السهام دورة من خلال تاريخ الأوامر. جربها بنفسك:

import java.io.*;
public class KeyTest {
  public static void main(String[] argv) {
    try {
      InputStreamReader unbuffered = new InputStreamReader(System.in);
      for (int i = 0; i < 10; ++i) {
        int x = unbuffered.read();
        System.out.println(String.format("%08x", x));
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
}

نفس المشكلة باستخدام Console فئة (إدخال مؤقتة تحت ويندوز، مفاتيح الأسهم Intepreted بواسطة Windows):

import java.io.*;
public class KeyTest2 {
  public static void main(String[] argv) {
    try {
      Console cons = System.console();
      if (cons != null) {
        Reader unbuffered = cons.reader();
        for (int i = 0; i < 10; ++i ) {
          int x = unbuffered.read();
          System.out.println(String.format("%08x", x));
        }
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
}

ليس مع رمز جافا المدمج. تحقق من مكتبات Java لعنات أو جين كما هو مذكور أعلاه، إذا كنت ترغب في المتابعة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top